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

标签 types casting julia covariance

我发现Array在 Julia 中不是 Number 的协变和子类型不会自动转换为父类(super class)型。

我的意思是,例如,

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]可以。

Julia 的这种行为有原因吗?

最佳答案

请参阅手册中的此部分:https://docs.julialang.org/en/stable/manual/types/#Parametric-Composite-Types-1这解释了这一点。请注意,head(a::Vector{T}) where {T <: Number} =... 有一个缩写形式。 (除非您在函数体中使用T,否则您可以使用它):

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

关于types - 为什么 Array{Float64, N} 不能作为参数为 Array{Number, N} 的函数的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51474530/

相关文章:

TypeScript 编译器 API 获取导入名称的类型

c - 整数转换(显式和隐式转换)

julia - 将文本添加到 Compose.jl 形状

c - 如何找到c中所有数据类型的限制

javascript - JS中有多少种数据类型,它们是什么?

c# - Convert.ChangeType 可以在未经检查的上下文中运行吗?

julia - 如何声明可以具有 int 和 floats 的数组类型

julia - Julia + Winston 的 stem() 绘图函数(类似于 MATLAB)

typescript - A 部分 部分 io-ts

c++ - 如何将字符串中的整数保存到数组中的元素