【问题标题】:TraversableOnce MonadOps in Scala collection libraryScala 集合库中的 TraversableOnce MonadOps
【发布时间】:2019-06-24 18:38:28
【问题描述】:

我正在查看 Scala 2.12 Collection Library 源代码并注意到以下内容:

trait TraversableOnce[+A] extends Any with GenTraversableOnce[A] {

  //methods

  implicit class MonadOps[+A](trav: TraversableOnce[A]) {
    def map[B](f: A => B): TraversableOnce[B] = trav.toIterator map f
    def flatMap[B](f: A => GenTraversableOnce[B]): TraversableOnce[B] = trav.toIterator flatMap f
    def withFilter(p: A => Boolean) = trav.toIterator filter p
    def filter(p: A => Boolean): TraversableOnce[A] = withFilter(p)
  }
}

将 Monad Ops 放入 implicit 类的原因是什么? TraversableOnceTraversable 子特征具有所有未定义为 imlpicit 类的单子方法(尽管通过 TraversableLike)。

【问题讨论】:

    标签: scala collections traversable


    【解决方案1】:

    Iterator,作为我们只希望遍历一次的东西,是扩展 TraversableOnce 而不扩展 Traversable 的例子。 MonadOps 上的方法将在那里使用。

    注意MonadOps 在伴生对象中,而不是特征中。

    另请注意,TraversableOnce 在 2.13.0 中已弃用,取而代之的是 IterableOnce

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-05
      • 2013-02-15
      • 2012-03-14
      • 1970-01-01
      • 2013-07-03
      • 2012-08-14
      • 1970-01-01
      相关资源
      最近更新 更多