在julia 0.4中工作的匿名函数数组,而不是0.5.1

The*_*rer 2 arrays anonymous-function julia

我正在将一些代码从Julia 0.4.7移植到0.5.1.我注意到有一些与匿名函数数组不兼容的东西.代码在这里:

f = x::Array{Function} -> size(x)

# Option 1    
f([k -> k+1, k-> k+1]) # This works in 0.4 & 0.5

# Option 2
f(repmat([k -> k+1], 2)) # This only works in 0.4
Run Code Online (Sandbox Code Playgroud)

据我所知,区别在于虽然在0.4中匿名数组仍然在内部被视为数组{Function,1},但在0.5中它看起来像数组{#11#12,1}(数字可能会改变),所以然后它引发一个MethodError,因此它们不匹配.

虽然这个例子很愚蠢但它显示了我真正需要的东西:复制匿名函数的次数可变.

谢谢!

Gni*_*muc 5

在Julia 0.5+中,Function变为抽象类型,Array{Function}参数类型也是不变的.

julia> typeof(x -> 2x) 
##1#2

julia> typeof(x -> 2x) <: Function
true

julia> typeof([x -> 2x]) <: Array{Function}
false
Run Code Online (Sandbox Code Playgroud)

因此,正确的定义方法f是:

f{T<:Function}(x::Array{T}) = size(x)

julia> f(repmat([k -> k+1], 2))
(2,)
Run Code Online (Sandbox Code Playgroud)