- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题在这里已经有了答案:
Question about Julia type syntax: Why is Array{Int32, 1} <: Array{Integer, 1} false?
(3 个回答)
5 天前关闭。
语境
在 Julia: what does the "<:" symbol mean? ,第二个回答直接引用了三个Julia's documentation for the <:
operator .第三个让我困惑。
问题
为了使这个问题独立于引用的问题,我将举一个特定的例子。
julia> 1.3 isa AbstractFloat
true
julia> [1.3 1.3; 1.2 1.2] isa Matrix{Float64}
true
julia> [1.3 1.3; 1.2 1.2] isa Matrix{AbstractFloat}
false
来自 Julia 的文档,
AbstractFloat
是所有浮点值的抽象类型,例如
Float32
,
Float64
等。这就是第一个例子的解释。但是,我不明白为什么
Float64
的矩阵不是
AbstractFloat
的矩阵.
最佳答案
你必须要做:
julia> [1.3 1.3; 1.2 1.2] isa Matrix{<:AbstractFloat}
true
因为 Julia 中的类型参数是不变的。
One particularly distinctive feature of Julia's type system is that concrete types may not subtype each other: all concrete types are final and may only have abstract types as their supertypes. While this might at first seem unduly restrictive, it has many beneficial consequences with surprisingly few drawbacks.
Matrix{Float64}
和
Matrix{AbstactFloat}
有不同的内存布局。如果我们希望编译器发出高效的机器代码,那么了解对象的内存布局至关重要。
Matrix{AbstractFloat}
和 Matrix{Float64}
是具体类型(它们可以有实例):julia> Matrix{AbstractFloat}(undef,0,0)
0×0 Matrix{AbstractFloat}
julia> Matrix{Float64}(undef,0,0)
0×0 Matrix{Float64}
julia> isconcretetype(Matrix{AbstractFloat})
true
julia> isconcretetype(Matrix{Float64})
true
Matrix{Float64}
不能是 Matrix{AbstractFloat}
的子类型(反之亦然)关于Julia 矩阵{AbstractFloat} 类型问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68905292/
这个问题在这里已经有了答案: Question about Julia type syntax: Why is Array{Int32, 1} 1.3 isa AbstractFloat true
在 Julia 0.4.0 中,当我尝试 rand(AbstractFloat, 1) 得到以下错误: ERROR: MethodError: `rand` has no method matchin
我是一名优秀的程序员,十分优秀!