Julia 为什么getindex有两种方法?
在源代码中,我看到为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
# 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"]