我发现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]
可以。
朱莉娅有这种行为的原因吗?
答案 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}) =...