参数化类型:接受给定类型的子类型,但不接受类型本身



考虑以下代码:

abstract type MyDimension end
abstract type My2D <: MyDimension end
abstract type My3D <: MyDimension end
mutable struct Shape{T<:MyDimension}
end

目前,您可以声明类型为Shape{My2D}Shape{My3D}Shape{MyDimension}的变量。

有没有办法允许前两种,但不允许Shape{MyDimension}

你可以做:

mutable struct Shape{T<:Union{My2D, My3D}}
end

或者创建一个中间类型:

abstract type My2or3D <: MyDimension end
abstract type My2D <: My2or3D end
abstract type My3D <: My2or3D end
mutable struct Shape{T<:Union{My2or3D}}
end

选择时应考虑是否希望Shape具有它接受的固定类型,或者是否希望潜在地允许定义它接受的其他类型而不必重新定义Shape类型。