在Julia中考虑以下函数定义:
plustwo = function(x)
x + 2
end
function addtwo(x)
x + 2
end
令我惊讶的是,这两个定义都是有效的,行为方式相同。即,
typeof(plustwo)
julia> Function
typeof(addtwo)
julia> Function
plustwo(3)
julia> 5
addtwo(3)
julia> 5
对此有何评论?
这是否意味着朱莉娅内有几种方言?
答案 0 :(得分:6)
它们都是函数,但addtwo
是generic
函数,可以有不同的方法,而plustwo
是anonymous
函数。
julia> addtwo.env
# 1 method for generic function "addtwo":
addtwo(x) at none:2
julia> plustwo.env
svec()
可以在运行时简单地改变匿名函数的代码,
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
generic
函数具有更好的性能,anonymous
函数更适合META
编程。