朱莉娅 - 这真的是一个单身匿名函数吗?

时间:2016-01-24 20:59:28

标签: optimization julia

using FastAnonymous

# By making this a generated function we should get only one instance 
# for a given type (singleton for each Value type)

@generated function save2arr_gen{Value}(::Type{Value})

    array = zeros(Value, 100)

    return @anon (t, v) -> begin
        array[t] = v
    end
end

@code_native test()表示它是,但是它?

function test()
    save2arr = save2arr_gen(Float64)
    save2arr(1, 24.24)

    shouldAlsoBe_save2arr = save2arr_gen(Float64)
    shouldAlsoBe_save2arr(1, 100.0)

    @assert save2arr.array[1] == 100.0 # This checks out.
end

这应该意味着无论调用save2arr_gen(Float64)多少次,只为它生成了一个值(一个lambda函数)。

1 个答案:

答案 0 :(得分:0)

请参阅J_Doc中的此段落:

  

生成的函数的主体仅执行一次(不完全   true,请参见下面的注释)当该方法为该特定集合时   参数类型已编译。之后,表达式返回   第一次调用时生成的函数被重新用作   方法体。

因此,在上面的示例中,每array = zeros(Value, 100)的值Value执行一次,之后每次调用save2arr_gen都会导致新的突变表达式,对于相同的array