函数定义悖论

时间:2016-01-26 07:48:06

标签: function julia

在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

对此有何评论?

这是否意味着朱莉娅内有几种方言?

1 个答案:

答案 0 :(得分:6)

它们都是函数,但addtwogeneric函数,可以有不同的方法,而plustwoanonymous函数。

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编程。