为什么Array {Float64,N}不能是参数为Array {Number,N}的函数的参数?

时间:2018-07-23 08:28:39

标签: types casting julia covariance

我发现Julia中的Array不是协变的,Number的子类型也不会自动转换为超类型。

例如,我的意思是

head(a::Vector{Number}) = a[1]head(a::Vector{Real}) = a[1]

无法执行head([1, 2, 3])

head(a::Vector{T}) where {T <: Number} = a[1]head(a::Vector{T}) where {T <: Real} = a[1]可以。

朱莉娅有这种行为的原因吗?

1 个答案:

答案 0 :(得分:5)

请参见手册的本部分:https://docs.julialang.org/en/stable/manual/types/#Parametric-Composite-Types-1,其中对此进行了说明。请注意,head(a::Vector{T}) where {T <: Number} =...有一个缩写形式(除非在函数正文中使用T,否则可以使用):

head(a::Vector{<:Number}) =...