Suponha que eu tenha
@kwdef struct SomeParams
A::Float64
B::Float64
end
tendo se mudado de
struct SomeParams
A::Float64
B::Float64
function SomeParams(C::Float64)
new(C^2, C + 0.5)
end
end
Existe uma boa maneira de eu pegar meu bolo e comê-lo também?
Sair do construtor produz um erro com a palavra-chave args.
Dos documentos , (ênfase minha)
Portanto, se você quiser definir construtores internos, precisará definir uma versão que seja compatível com a versão externa gerada por
@kwdef
.Porém , se você estiver apenas delegando ao
@kwdef
construtor, poderá escrever um construtor externo e evitar todo o problema.Um não interfere no outro. Você poderia fazer:
E agora é só:
Para entender esse comportamento, dê uma olhada na documentação :
Portanto, se você substituir o construtor interno, também precisará fornecer a implementação padrão.
EDITAR
Claro que sempre é possível manter o construtor fora do objeto como você pode ver na outra resposta.