在OCaml中,模块(Module)和类(Class)有哪些区别?
通过我的搜索,我发现以下内容:
两者都提供了抽象和封装的机制,支持子类型(通过省略对象方法或模块字段)和继承(对象使用inherit; 模块使用include)。然而,这两个系统不可比较。一方面,对象具有优势:对象是一等值,而模块不是——换句话说,模块不支持动态查找。另一方面,模块具有优势:模块可以包含类型定义,而对象则不能。
首先,我不理解“模块不支持动态查找”是什么意思。在我的理解中,抽象和多态确实意味着父指针可以引用子实例。这是否就是“动态查找”?如果不是,那么动态查找实际上是什么?
在实践中,我们何时选择使用模块,何时选择使用类?
通过我的搜索,我发现以下内容:
两者都提供了抽象和封装的机制,支持子类型(通过省略对象方法或模块字段)和继承(对象使用inherit; 模块使用include)。然而,这两个系统不可比较。一方面,对象具有优势:对象是一等值,而模块不是——换句话说,模块不支持动态查找。另一方面,模块具有优势:模块可以包含类型定义,而对象则不能。
首先,我不理解“模块不支持动态查找”是什么意思。在我的理解中,抽象和多态确实意味着父指针可以引用子实例。这是否就是“动态查找”?如果不是,那么动态查找实际上是什么?
在实践中,我们何时选择使用模块,何时选择使用类?