如何让Julia参数类型仅接受给定类型的子类型而非自身?
如何限制Julia类型参数仅接受父类型的子类型而非父类型本身?
你当前的代码中,Shape{T<:MyDimension}的类型参数允许直接传入MyDimension本身,但你希望只允许My2D、My3D这类MyDimension的子类型作为参数,禁止Shape{MyDimension}的声明。
可以通过给Shape添加自定义构造函数,在实例化时检查类型参数是否为MyDimension本身来实现需求:
abstract type MyDimension end abstract type My2D <: MyDimension end abstract type My3D <: MyDimension end mutable struct Shape{T<:MyDimension} # 可在此添加结构体字段 function Shape{T}() where T<:MyDimension # 检查类型参数是否为MyDimension本身,是则抛出错误 T === MyDimension && error("Shape不允许直接使用MyDimension作为类型参数") new{T}() end end # 测试验证 Shape{My2D}() # 正常创建实例 Shape{My3D}() # 正常创建实例 Shape{MyDimension}() # 触发错误:Shape不允许直接使用MyDimension作为类型参数
这种方法的优势在于,后续新增MyDimension的子类型时,不需要修改构造函数就能自动支持,比直接枚举Union{My2D, My3D}的方式更灵活。
内容的提问来源于stack exchange,提问作者Wali Waqar
相关产品推荐
相关产品推荐

