我有一个抽象类型
abstract type PointND{N<:Integer, T<:Number} end
当我对它进行子类型输入时,设置
N=1
struct Point1D{T} <: PointND{1, T}
x::T
end
Julia 抛出错误
ERROR: TypeError: in PointND, in N, expected N<:Integer, got Int64
即使
(typeof(1)<:Integer) == true
.即使在
N
时也会发生这种情况类型为 Number
.为什么这不起作用?
最佳答案
您的 N
这里不是 Integer
的子类型,但是 Integer
的子类型的实例.如果你真的尝试 1 <: Integer
在 REPL 中,它会抛出错误。所以 PointND 将只接受子类型 Integer
的类型, 喜欢 Int
或 UInt
,但不是 Integer
的子类型的实例喜欢 1
或 0xff
.这里的解决方案实际上只是不限制 N
的类型并清楚地记录在案 N
应该总是一个整数。目前没有任何方法可以限制类型参数中位类型的实例类型。
关于types - julia 子类型化参数父类(super class)型时类型不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61659581/