gpt4 book ai didi

scala - 为什么Scala解释器定义的对象称为 'module'?

转载 作者:行者123 更新时间:2023-12-04 03:59:22 26 4
gpt4 key购买 nike

scala> object Test
defined module Test

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

模块和伴生对象之间是否有区别,或者两个不同的名称是一样的?

最佳答案

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

此外,你只能说一个伴随对象,当它实际上伴随着一些东西时:

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

处于伴生状态会为伴生类添加功能,即可见性(例如,该类可以看到伴生模块的私有(private)字段)。相同的范围和编译单元意味着,它们需要定义在相同的源文件和相同的包中。

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

关于scala - 为什么Scala解释器定义的对象称为 'module'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11266261/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com