Julia 为什么getindex有两种方法?

Julia 为什么getindex有两种方法?,julia,Julia,在源代码中,我看到为getindex实现了两个方法 # T[x...] constructs Array{T,1} function getindex(T::Type, vals...) a = Array(T,length(vals)) @inbounds for i = 1:length(vals) a[i] = vals[i] end return a end function getindex(::Type{Any}, vals::ANY

在源代码中,我看到为getindex实现了两个方法

# T[x...] constructs Array{T,1}
function getindex(T::Type, vals...)
    a = Array(T,length(vals))
    @inbounds for i = 1:length(vals)
        a[i] = vals[i]
    end
    return a
end

function getindex(::Type{Any}, vals::ANY...)
    a = Array(Any,length(vals))
    @inbounds for i = 1:length(vals)
        a[i] = vals[i]
    end
    return a
end

为什么需要第二个呢?我已经阅读了性能提示,但在本例中,
a
的类型是稳定的:总是
T

这两种方法都是
getindex
方法,用于通过语法创建数组,例如

Int[1,4,9]
(第一种方法)和

(第二种方法)。第二个不是严格要求的,而是一个优化,以减少编译器的时间和资源

类型签名
::ANY
(与
::ANY
相反)指示编译器不要专门处理这些参数的实际类型,这在这种情况下是有意义的,因为没有性能增益。将这种特殊情况放在适当的位置是有意义的,因为数组很可能使用
任意[…]
语法,使用广泛的类型组合来构造

Any[1,4.0,"9"]