在源代码中,我看到为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
。
答案 0 :(得分:3)
这两种方法都是getindex
方法,用于通过语法创建数组,例如
Int[1,4,9]
(第一种方法)和
Any[1,4.0,"9"]
(第二种方法)。第二个不是严格要求的,但是是减少编译器时间和资源的优化。
类型签名::ANY
(与::Any
相对)指示编译器不要专注于这些参数的实际类型,这在这种情况下是有意义的,因为没有性能增益。有这个特殊情况是有意义的,因为数组很可能使用Any[...]
语法使用各种类型组合构建。