在尝试使用Julia 1.0时,我注意到我可以做这样的事情:
x\y = 1
然后REPL显示:
\ (generic function with 1 method)
这意味着它是一个有效的任务(口译员不会抱怨)。然而,x
,y
和x\y
都未定义。
这种表达的含义是什么?
这是一个新的函数定义,(种类)在\
中影响左分割算子Base
,因为左分割算子已经为Julia中的某些类型定义了。新函数定义是\(x,y) = 1
(函数参数的名称无关紧要),适用于所有类型的变量。这将阻止julia因名称冲突而加载Base.\
。无论输入是什么,你的新\
都会返回相同的值。
julia> x\y = 5
julia> a = 3; b = 4;
julia> a\b
5
julia> c = "Lorem ipsum"; d = "dolor";
julia> c\d
5
如果你已经使用了\
中定义的Base
,你的重新定义会抛出一个错误,说扩展Base.\
需要使用import Base.\
进行显式导入。然而,在\
之后定义import Base.\
的行为将会有所不同。它将扩展运营商Base.\
。
julia> 1\[1,3]
2-element Array{Float64,1}:
1.0
3.0
julia> import Base.\
julia> x\y=3
\ (generic function with 152 methods)
julia> 1\[1,3]
2-element Array{Int64,1}:
3
3