作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读 Scala List API .我无法弄清楚下面的伴随功能的用途。
def companion : GenericCompanion[List]
The factory companion object that builds instances of class List.
似乎是为了List中的一些功能,而不是让终端用户直接消费的。如果是这样,人们怎么知道该功能是否不由应用程序开发人员直接使用?当然,这只是我有根据的假设,如果我错了,希望得到纠正。
最佳答案
在不知道集合库中设计选择的细节的情况下,我想我可以在这里看到两个用途:
干燥。有点内部但有一个伴随对象充当来自特定类型 Builder 的工厂建筑是集合库中的常见模式,因此将其重构为每个集合实现组成的类可以减少重复。
抽象。公开“伙伴”为客户端代码提供了一种构造与实例相同类型的新集合的方法,而不必知道该类型是什么。如果您想创建返回一致类型的更通用的集合处理函数,这将很有用。
以下是它可能有用的一些示例:
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/
我正在阅读 Scala List API .我无法弄清楚下面的伴随功能的用途。 def companion : GenericCompanion[List] The factory companion
我是一名优秀的程序员,十分优秀!