Why is a defined object called 'module' by the Scala interpreter?
1 2 |
为什么scala解释器将已定义的对象
模块和伴生对象之间是否有区别?或者只是两个不同的名称一样?
从技术上讲,只有一种这样的东西,在语言规范中,它通常被称为"模块",但是您还会发现以下语句:"对象定义定义了单个对象(或:模块)……"(Scala语言规范)
此外,您只能说一个伴随对象实际伴随的东西:
"通常,类的伴随模块是与该类具有相同名称的对象,并且在相同的作用域和编译单元中定义。相反,该类称为模块的伴随类。" (再次考虑:伴随对象=伴随模块)
处于伴随状态会为伴随类添加功能,即可见性(例如,该类可以看到伴随模块的私有字段)。相同的作用域和编译单元意味着,它们需要在相同的源文件和相同的包中定义。
LtU上有一个有趣的线程,其中讨论了Scala的对象与模块术语。如果您感兴趣的话,它还包含指向Odersky和Zenger的论文的链接。展示他们如何看待ML语言的模块系统(OCaml对Scala的主要影响),以及如何将其框架化为各种模块化组合方法(建议该模块是一个更通用的概念;特性作为mixin模块,... )