重载 `==`

以前重载 == 的时候,一般这么写的:

julia> import Base:(==)

不加括号的时候会出错:

julia> import Base:==
ERROR: syntax: unexpected "="

今天忽然想直接用 Base.== 的形式:

julia> Base.==(::Val{1}, ::Val{2}) = true
ERROR: syntax: invalid function name ".=="

julia> Base.(==)(::Val{1}, ::Val{2}) = true
ERROR: syntax: invalid function name "Base.((==,))"

找了好久,才发现有下面这种写法(注意空格):

julia> Base. ==(::Val{1}, ::Val{2}) = true

不知道为啥要这么写

我一般都用

Base.:(==)(lbs, rhs)

不explicit写全重载路径重构的时候很蛋疼因为不知道import了没有。Julia的代码组织可以参考一下YASGuide,我们在这个repo里讨论过很多“正确的”写法。

(LHS::T1 Base.:(==) RHS:: T2) = xxx

也是合法的,我印象里

1 个赞