scala - scala List 的伴随函数返回 GenericCompanion 的用例是什么?

标签 scala

我正在阅读 Scala List API .我无法弄清楚下面的伴随功能的用途。

def companion : GenericCompanion[List]

The factory companion object that builds instances of class List.

似乎是为了List中的一些功能,而不是让终端用户直接消费的。如果是这样,人们怎么知道该功能是否不由应用程序开发人员直接使用?当然,这只是我有根据的假设,如果我错了,希望得到纠正。

最佳答案

在不知道集合库中设计选择的细节的情况下,我想我可以在这里看到两个用途:

  1. 干燥。有点内部但有一个伴随对象充当来自特定类型 Builder 的工厂建筑是集合库中的常见模式,因此将其重构为每个集合实现组成的类可以减少重复。

  2. 抽象。公开“伙伴”为客户端代码提供了一种构造与实例相同类型的新集合的方法,而不必知道该类型是什么。如果您想创建返回一致类型的更通用的集合处理函数,这将很有用。

以下是它可能有用的一些示例:

scala> val a: Traversable[Int] = Set(1,2,3,4)
a: Traversable[Int] = Set(1, 2, 3, 4)

scala> a.companion(1,2,3)
res1: Traversable[Int] = Set(1, 2, 3)

scala> val b: Traversable[Int] = List(1,2,3,4)
b: Traversable[Int] = List(1, 2, 3, 4)

scala> b.companion(1,2,3)
res2: Traversable[Int] = List(1, 2, 3)

scala> def ends[T](c: Traversable[T]) : Traversable[T]= {
|        c.companion(c.head, c.last)
|      }
ends: [T](c: Traversable[T])Traversable[T]

scala> ends[Int](List(1,2,3,4,5))
res3: Traversable[Int] = List(1, 5)

scala> ends[Int](Set(1,2,3,4,5))
res4: Traversable[Int] = Set(5, 4)

请注意,“ends”不知道它接收到 Traversable 的哪个子类型,但能够返回使用同伴构建的兼容类型的新集合。

关于scala - scala List 的伴随函数返回 GenericCompanion 的用例是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8568609/

相关文章:

java - Java 8's Optional, Scala' s Option 和 Haskell 的 Maybe 之间的主要区别是什么?

scala - 这两种函数格式的区别

scala - 为什么DataFrame.collect()不返回数组

java - Kotlin 的类型具体化使哪些在 Java 或 Scala 中无法实现的成为可能?

scala - SqlContext 不是包 org.apache.spark.sql 的成员

java - 升级到 2.x 时,org.refcodes.console.ConsoleSugar 中缺少 switsh 和 helpSwitch 方法

java - 使用kafka(或一般的scala?)时​​ Sonar 扫描异常

windows - Scala & Spark : Dataframe. write._ 在 Windows 上

java - 将任意参数的数组传递给通过反射调用的方法

java - Scala - 如何使用 Java Singleton 对象