代码之家  ›  专栏  ›  技术社区  ›  Naetmul

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

  •  4
  • Naetmul  · 技术社区  · 6 年前

    我发现了 Array 在Julia中不是协变的 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 回复  |  直到 6 年前
        1
  •  5
  •   fredrikekre    6 年前

    请参阅手册中的本节: https://docs.julialang.org/en/stable/manual/types/#Parametric-Composite-Types-1 这就解释了注意,有一个简短的形式 head(a::Vector{T}) where {T <: Number} =... (你可以使用,除非你使用 T 在函数体中):

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