下面struct的初始化继承有办法写得方便维护些吗?

我了解到julia没有class,但是我又需要类似class的结构

试着用struct来完成,下面的只是示例,完整的struct,field比下面的多很多,所以这样写起来就很麻烦,也不方便维护struct的field,有办法写的简洁些吗?

struct P1
    M::Int8
    Ks::Int8
    metric::String
end

struct P2
    D::Int16
    Ds::Int16 
    k_v::Int64
    function P2(D,k_v)
        Ds = D*k_v
        new(D, Ds, k_v)
    end
end


struct C
    M::Int8
    Ks::Int8
    metric::String

    D::Int16
    Ds::Int16 
    k_v::Int64

    function C(M, Ks, metric, D, k_v)
        p1 = P1(M, Ks, metric)
        M, Ks, metric = p1.M, p1.Ks, p1.metric
        
        p2 = P2(D, k_v)
        D, Ds, k_v = p2.D, p2.Ds, p2.k_v 

        new(M, Ks, metric, D, Ds, k_v)
    end 
end

提前感谢任何的帮助或建议。

如果仅从给出的例子来看,struct C里面所有的field都是重复的。是否可以考虑直接嵌套?

struct P1
    M::Int8
    Ks::Int8
    metric::String
end

struct P2
    D::Int16
    Ds::Int16 
    k_v::Int64
    function P2(D,k_v)
        Ds = D*k_v
        new(D, Ds, k_v)
    end
end

struct C
    p1::P1
    p2::P2    

    function C(M, Ks, metric, D, k_v)
        p1 = P1(M, Ks, metric)
        
        p2 = P2(D, k_v)

        new(p1, p2)
    end 
end

而且严格说起来这个不能叫做“继承”吧?

@henry2004y 我在英文论坛上也得到类似的回复

https://discourse.julialang.org/t/how-to-simplify-the-code-in-constructing-struct/70411

3D Obj 格式文件解析啊?

浅谈Julia语言:Julia的编程范式 - 知乎 (zhihu.com)

You might want to have a look at these packages:

这在oop里叫组合

备案号:京ICP备17009874号-2