如何在Scala 2.9.0中覆盖Iterable.flatMap?

Sco*_*son 2 iterable scala lazy-evaluation scala-2.9 scala-collections

我只是将我的一些代码更新到2.9.0,而且我遇到了一个问题.我有一个特性,我称之为"NonStrictIterable"(基本上,一切都应该尽可能地懒惰 - NonStrictIterable之外的代码本身不应该运行,直到某人实际要求一个元素).

但是在2.9.0中,我似乎无法覆盖flatMap.这是一个减少版本,显示错误:

import scala.collection.generic.CanBuildFrom

trait NonStrictIterable[A] extends Iterable[A] { self =>
  def iterator: Iterator[A]

  override def flatMap[B, That](f: A => TraversableOnce[B])(implicit bf: CanBuildFrom[Iterable[A], B, That]): That = {
    new NonStrictIterable[B] {
      def iterator = self.iterator flatMap { a: A => f(a).toIterable.iterator }
    }.asInstanceOf[That]
  }
}
Run Code Online (Sandbox Code Playgroud)

这曾经在2.9.0之前工作,但现在我得到"方法flatMap覆盖任何东西".查看Iterable.flatMap的方法签名,我看到TraversableOnce类型签名已更改为enTraversableOnce.做出相应的改变

import scala.collection.GenTraversableOnce
import scala.collection.generic.CanBuildFrom

trait NonStrictIterable[A] extends Iterable[A] { self =>
  def iterator: Iterator[A]

  override def flatMap[B, That](f: A => GenTraversableOnce[B])(implicit bf: CanBuildFrom[Iterable[A], B, That]): That = {
    new NonStrictIterable[B] {
      def iterator = self.iterator flatMap { a: A => f(a).toIterable.iterator }
    }.asInstanceOf[That]
  }
}
Run Code Online (Sandbox Code Playgroud)

我得到编译器错误"错误或无法访问类型".

这是怎么回事?有人可以建议一个解决方法吗?

Mar*_*sky 8

你需要升级到2.9最终版.这是之前已修复的RC中的错误.