假设我有
@kwdef struct SomeParams
A::Float64
B::Float64
end
已经搬离
struct SomeParams
A::Float64
B::Float64
function SomeParams(C::Float64)
new(C^2, C + 0.5)
end
end
有没有什么好办法让我鱼与熊掌兼得呢?
离开构造函数会产生关键字 args 的错误。
假设我有
@kwdef struct SomeParams
A::Float64
B::Float64
end
已经搬离
struct SomeParams
A::Float64
B::Float64
function SomeParams(C::Float64)
new(C^2, C + 0.5)
end
end
有没有什么好办法让我鱼与熊掌兼得呢?
离开构造函数会产生关键字 args 的错误。
来自文档,(强调我的)
因此,如果您想定义内部构造函数,则需要定义一个与 . 生成的外部构造函数兼容的版本
@kwdef
。不过,如果您只是委托给
@kwdef
构造函数,则可以编写一个外部构造函数并避免整个问题。一者互不干扰。你可以这样做:
现在只是:
要了解此行为,请查看文档:
因此,如果您覆盖内部构造函数,您也需要提供默认实现。
编辑
当然,始终可以将构造函数保留在对象之外,正如您在其他答案中看到的那样。