为什么getindex有2种方法?

时间:2016-03-10 16:43:36

标签: julia

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

# 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

1 个答案:

答案 0 :(得分:3)

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

Int[1,4,9]

(第一种方法)和

Any[1,4.0,"9"]

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

类型签名::ANY(与::Any相对)指示编译器不要专注于这些参数的实际类型,这在这种情况下是有意义的,因为没有性能增益。有这个特殊情况是有意义的,因为数组很可能使用Any[...]语法使用各种类型组合构建。