julia 子类型化参数超类型时类型不正确

Ser*_*gey 4 types julia

我有一个抽象类型

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。为什么这不起作用?

use*_*164 5

N在这里不是 的子类型Integer,而是 的子类型的实例Integer。如果你真的1 <: Integer在 REPL 中尝试,它会抛出一个错误。所以PointND只接受类型的亚型Integer,如IntUInt,但不是亚型的情况下,Integer10xff。这里的解决方案实际上只是根本不限制类型,N而是清楚地记录它N应该始终是一个整数。目前没有任何方法可以限制类型参数中位类型实例的类型。