Julia中如何为@kwdef定义的结构体添加额外构造函数?
解决方法
要同时拥有关键字构造函数和自定义构造函数,只需要将自定义构造函数定义在@kwdef结构体的外部即可,具体实现如下:
@kwdef struct SomeParams A::Float64 B::Float64 end # 外部定义自定义构造函数,调用关键字构造生成实例 function SomeParams(C::Float64) SomeParams(A=C^2, B=C + 0.5) end
这样两种构造方式都能正常使用:
- 关键字构造:
SomeParams(A=2.0, B=3.5) - 自定义构造:
SomeParams(2.0)# 自动计算得到A=4.0,B=2.5
如果偏好将自定义构造函数写在结构体内部,也可以通过关键字参数语法调用new实现,避免和@kwdef生成的构造逻辑冲突:
@kwdef struct SomeParams A::Float64 B::Float64 # 内部定义自定义构造,通过关键字参数初始化 function SomeParams(C::Float64) new(; A=C^2, B=C + 0.5) end end
这种写法同样支持两种构造方式,内部逻辑不会干扰@kwdef生成的关键字构造功能。
内容的提问来源于stack exchange,提问作者DistortedASD
相关产品推荐
相关产品推荐

