如何在Scala文档中阅读class/object

10 浏览
0 Comments

如何在Scala文档中阅读class/object

我刚学习Scala。

当我阅读官方文档查询Array时,它有两个版本。一个是针对Class,另一个是针对Object。我认为我知道Class和Object的区别,当我需要找到Array方法时,我通常会去Class版本。但我不太清楚在什么时候需要去这个Object版本。似乎当我想创建多维数组时,需要用Object版本中的方法(ofDim),而不是Class版本。为什么呢?

admin 更改状态以发布 2023年5月21日
0
0 Comments

根据我的理解,类定义了具体的实现方式,包括操作实例的方法(例如数组 - map、count、fold等方法)。

另一方面,伴生对象提供了创建实例的实用方法(例如 apply…),在这种情况下(对于数组),它主要包含工厂方法。

0
0 Comments

Array这个标识符根据上下文可能指代类型或其伴生对象。

scala> Array('a', 'b', 'c')
res0: Array[Char] = Array(a, b, c)

res0Array类型的一个实例。 res0是一个对象。

scala> Array
res1: Array.type = scala.Array$@1a69136

res1是伴生对象。 res1是一个对象。它是一个单例对象,这意味着它没有其他类型的对象。

这两个对象有不同的方法,因为它们是非常不同的事情。

Array类型的实例具有类定义的方法。这些自然是操作特定Array实例的方法。例如,length 方法返回数组的长度。您需要一个实例才能执行此操作。写Array.length是没有意义的,因为它没有指定您需要哪个数组的长度。但Array('a','b','c').length 3

伴生对象具有对象定义的方法。这些方法不需要Array 实例。伴生对象将包含创建实例的方法,Array 也是如此。因此,Array.ofDim(2,2)创建一个2x2数组。该方法没有由类定义,因为实例不应该具有它。例如,写Array('a','b','c').ofDim(2,2)没有多少意义,因为结果(一个空的2x2数组)与调用该方法时传入的实例无关。

0