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函数)。
答案 0 :(得分:0)
请参阅J_Doc中的此段落:
生成的函数的主体仅执行一次(不完全 true,请参见下面的注释)当该方法为该特定集合时 参数类型已编译。之后,表达式返回 第一次调用时生成的函数被重新用作 方法体。
因此,在上面的示例中,每array = zeros(Value, 100)
的值Value
仅执行一次,之后每次调用save2arr_gen
都会导致新的突变表达式,对于相同的array
。