如何在 Scala 文档中读取类/对象
Posted
技术标签:
【中文标题】如何在 Scala 文档中读取类/对象【英文标题】:How to read class/object in Scala documentation 【发布时间】:2015-02-04 23:29:23 【问题描述】:我刚学了 Scala。
例如,当我阅读官方文档查找Array
时,它有两个版本。一个用于Class,另一个用于Object。我想我知道difference between Class and Object,当我需要Array
的查找方法时,我通常会去Class版本。我不太清楚什么时候需要转到这个 Object 版本。似乎当我想创建多维数组时,我需要 Object 版本中的方法(ofDim
)而不是类版本。为什么?
【问题讨论】:
【参考方案1】:标识符Array
指的是类型或其伴随对象,具体取决于上下文。
scala> Array('a', 'b', 'c')
res0: Array[Char] = Array(a, b, c)
res0
是Array
类型的一个实例。 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').length
是3
。
伴随对象有the methods defined by the object。这些方法不需要需要Array
实例。伴随对象将对象包含创建实例的方法,Array
就是这种情况。因此Array.ofDim(2, 2)
创建了一个 2x2 数组。该方法不是由类定义的,因为实例不应该有它。例如,写Array('a', 'b', 'c').ofDim(2, 2)
没有多大意义,因为结果(一个空的 2x2 数组)与调用该方法的实例无关。
【讨论】:
我能说对象定义的方法类似于Java中的static methods吗? 是的,非常如此。如果你提到你熟悉 Java,我会这么说;)【参考方案2】:根据我的理解,该类使用操作实例的方法定义了实际实现(在本例中为 Array - 方法,如 map、count、fold 等)。
另一方面,伴生对象提供了用于创建的实用方法(如 apply...)(对于 Array 在这种情况下它主要包含工厂方法)。
【讨论】:
【参考方案3】:类方法对类实例数据进行操作。类似于 Array 类的数组元素。伴随对象方法通常在一个类的多个实例上操作或创建一个。
Scala 中的伴生对象与 Java 或 C# 中的静态成员的作用相同。例如,对于 Array 它主要包含工厂方法。我不希望在伴随对象上看到像 length
或 isEmpty
这样的方法,另一方面,我希望在类的实例上看到工厂方法。
【讨论】:
以上是关于如何在 Scala 文档中读取类/对象的主要内容,如果未能解决你的问题,请参考以下文章
如何在 EMR 上使用 Spark 3 为 Scala 对象解决“加载类失败”