如何在Scala文档中读取类/对象

时间:2014-12-07 02:15:27

标签: scala

我刚学会了Scala。

例如,当我阅读官方文档以查找Array时,它有两个版本。一个用于Class,另一个用于Object。我想我知道difference between Class and Object,当我需要查找Array的方法时,我通常会转到Class版本。我不知道什么时候需要转到这个Object版本。看来当我想创建多维数组时,我需要在Object版本而不是类版本中使用方法(ofDim)。为什么呢?

3 个答案:

答案 0 :(得分:6)

标识符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类型的实例有the methods defined by the class。当然,这些是在特定Array实例上运行的方法。例如,length方法返回数组的长度。您需要一个实例来执行此操作。写Array.length是没有意义的,因为它没有指定你想要长度的数组。但Array('a', 'b', 'c').length3

伴侣对象有the methods defined by the object。这些是需要Array实例的方法。 Companion对象将包含创建实例的方法,如Array的情况。因此Array.ofDim(2, 2)创建一个2x2数组。该方法不是由类定义的,因为实例不应该有它。例如,写Array('a', 'b', 'c').ofDim(2, 2)是没有意义的,因为结果(一个空的2x2数组)与调用该方法的实例无关。

答案 1 :(得分:0)

根据我的理解,该类使用对实例进行操作的方法定义实际实现(在本例中为Array - 诸如map,count,fold等方法)。

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

答案 2 :(得分:0)

类方法对类实例数据进行操作。类似于Array类的数组元素。伴随对象方法通常在类的多个实例上运行或创建一个。

Scala中的伴随对象与Java或C#中的静态成员扮演相同的角色。例如,对于Array,它主要包含工厂方法。我不希望在伴随对象上看到lengthisEmpty等方法,另一方面我希望在类的实例上看到工厂方法。