考虑以下代码:
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
类型。