【问题标题】:Why is a defined object called 'module' by the Scala interpreter?为什么Scala解释器将定义的对象称为“模块”?
【发布时间】:2012-06-29 17:24:33
【问题描述】:
scala> object Test
defined module Test

为什么定义的对象 Test 被 scala 解释器称为“模块”,而不是伴随对象?

模块和伴生对象之间是否有区别,还是只是有两个不同的名称?

【问题讨论】:

  • 我认为 module 在某个时间点是 Scala 关键字。它已更改为object,以使主流开发人员更容易使用语言(感觉)。
  • This gist 可能会有所帮助。
  • 感谢您提供更多信息。

标签: scala module


【解决方案1】:

从技术上讲,只有一个这样的东西,在语言规范中它主要被称为“模块”,但你也会发现这样的说法:“对象定义定义了一个单一的对象(或:模块)......”(@ 987654321@)

此外,您只能说 companion 对象,当它实际上伴随着某些东西时:

"一般来说,一个类的companion module是一个与类同名的对象,定义在同一个作用域和编译单元中。反之,类称为模块的伴侣类。” (再想一想:伴生对象 = 伴生模块)

处于伴随状态会为伴随类添加特性,即可见性(例如,类可以看到伴随模块的私有字段)。相同的作用域和编译单元意味着,它们需要定义在同一个源文件和同一个包中。


有一个interesting thread on LtU 讨论了Scala 的对象与模块术语。如果您感兴趣,它还包含指向 Odersky 和 ​​Zenger 的论文的链接;展示了他们如何特别关注 ML 语言的模块系统(OCaml 对 Scala 产生了重大影响),以及他们如何将其构建为模块化组合的各种方法(表明该模块是一个更通用的概念;特征作为 mixin 模块,... )

【讨论】:

  • 提示:具有特征的伴随对象与类一样工作。
猜你喜欢
  • 2012-01-12
  • 2014-12-08
  • 1970-01-01
  • 1970-01-01
  • 2020-06-14
  • 2017-08-01
  • 2015-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多