我有一个抽象类型
abstract type PointND{N<:Integer, T<:Number} end
Run Code Online (Sandbox Code Playgroud)
当我子输入它时,设置 N=1
struct Point1D{T} <: PointND{1, T}
x::T
end
Run Code Online (Sandbox Code Playgroud)
朱莉娅抛出错误
ERROR: TypeError: in PointND, in N, expected N<:Integer, got Int64
Run Code Online (Sandbox Code Playgroud)
即使(typeof(1)<:Integer) == true。
即使N类型为 ,也会发生这种情况Number。为什么这不起作用?
您N在这里不是 的子类型Integer,而是 的子类型的实例Integer。如果你真的1 <: Integer在 REPL 中尝试,它会抛出一个错误。所以PointND只接受类型的亚型Integer,如Int或UInt,但不是亚型的情况下,Integer像1或0xff。这里的解决方案实际上只是根本不限制类型,N而是清楚地记录它N应该始终是一个整数。目前没有任何方法可以限制类型参数中位类型实例的类型。
| 归档时间: |
|
| 查看次数: |
47 次 |
| 最近记录: |