julia没有class,我要如何有效的组织代码?

我有这样一个代码结构,我这里用类来描述。

class P0
class P1(P0)
class P2(P0)
class P3(P0)

class C1(P1,P2)
class C2(P1,P3)

每一个类里面都有好几种方法,子类会多次调用父类的方法。如果我把代码改成全为普通函数,那不是其中逻辑少了很多?今后自己维护起来也不方便。

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

julia的核心逻辑是面向过程而非面向对象,所以在考虑改写传统上OOP的代码时的确需要重新设计。

对于你这里的情况,P0可以考虑作为AbstractStruct,而P1, P2, P3则是三个P0的子类实例struct。而C1C2作为描述上述子类之间相互关系的“子类”,在julia中可以完全借由multiple-dispatch多重派发来完成,而无需使用新的类来描述。而所谓“子类多次调用父类方法”,那就应该考虑把这些通用的方法接口参数的类型写成P0的类型。大致这样的思路改写不大应该损失任何逻辑,反倒是应该由于减少了boiler plates使得代码变得更简单了。

英文社区对此有非常多的讨论。但我还没有找到比较好的总结。

目前比较完备的材料是:《Hands-On Design Patterns and Best Practices with Julia

1 个赞

在以上链接中,Stefan Karpinski的一个视频和一份文字说明值得着重浏览:

如Chris Rackauckas所说,我们比较熟悉的OOP可以理解为single dispatch,也就是基于实际上的第一个参数来选择调用的方法。但是Stefan的回帖中也指出了用class组织代码的局限性,以及为什么Julia不想也不需要支持class。

2 个赞