考虑Julia中的以下函数定义:
plustwo = function(x)
x + 2
end
function addtwo(x)
x + 2
end
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,这两个定义都是有效的,并且行为方式相同.也就是说,
typeof(plustwo)
julia> Function
typeof(addtwo)
julia> Function
plustwo(3)
julia> 5
addtwo(3)
julia> 5
Run Code Online (Sandbox Code Playgroud)
对此有何评论?
这是否意味着朱莉娅内有几种方言?
他们两人都是功能,但是,addtwo
是generic
可能有不同的方法的功能,同时plustwo
是一个anonymous
功能.
julia> addtwo.env
# 1 method for generic function "addtwo":
addtwo(x) at none:2
julia> plustwo.env
svec()
Run Code Online (Sandbox Code Playgroud)
人们可以在运行时简单地改变匿名函数的代码,
julia> plustwo.code
AST(:($(Expr(:lambda,Any[:(x::Any)],Any[Any[Any[:x,:Any,0]],Any[],0,Any[]], :(
begin # none, line 2:
return x + 2
end)))))
julia> addtwo.code
ERROR: UndefRefError: access to undefined reference
Run Code Online (Sandbox Code Playgroud)
generic
功能有更好的性能和anonymous
功能更适合META
编程.