Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么定义的对象称为';模块';通过Scala解释器?_Scala_Module - Fatal编程技术网

为什么定义的对象称为';模块';通过Scala解释器?

为什么定义的对象称为';模块';通过Scala解释器?,scala,module,Scala,Module,为什么定义的对象Test被scala解释器称为“模块”,而不是伴随对象 模块和伴生对象之间有区别吗?或者只是两个不同的名称相同 从技术上讲,只有一个这样的东西,在语言规范中,它主要被称为“模块”,但您也会发现这样一句话:“对象定义定义了单个对象(或:模块)…”() 此外,您只能在伴奏对象实际伴奏某物时谈论伴奏对象: “通常,类的伴生模块是一个对象,它与类具有相同的名称,并且在相同的范围和编译单元中定义。相反,该类被称为模块的伴生类。”(再次思考:伴生对象=伴生模块) 处于同伴状态会为同伴类添加特

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


模块和伴生对象之间有区别吗?或者只是两个不同的名称相同

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

此外,您只能在伴奏对象实际伴奏某物时谈论伴奏对象:

“通常,类的伴生模块是一个对象,它与类具有相同的名称,并且在相同的范围和编译单元中定义。相反,该类被称为模块的伴生类。”(再次思考:伴生对象=伴生模块)

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



Scala的对象与模块术语在这里有一个讨论点。如果你感兴趣的话,它还包含一个到奥德斯基和曾格的论文的链接;展示他们如何特别关注ML语言的模块系统(OCaml是Scala的主要影响因素),以及他们如何将其构建为模块组合的各种方法(表明模块是一个更通用的概念;作为混合模块的特征,…)

我认为
模块在某个时候是Scala的关键词。它被改为
object
,以使主流开发人员更容易使用语言(感觉)。可能会有所帮助。感谢您提供的额外信息。提示:具有traits的伴生对象与类一样有效。
scala> object Test
defined module Test