Generics 为什么在GenericTraversableTemplate上声明Flatte而不是TraversableLike?
Generics 为什么在GenericTraversableTemplate上声明Flatte而不是TraversableLike?,generics,scala,scala-2.8,scala-collections,Generics,Scala,Scala 2.8,Scala Collections,TraversableLike.flatMap的签名如下: def flatMap[B, Th](f : (A) => Traversable[B])(implicit bf : CanBuildFrom[Repr, B, Th]) : Th GenericTraversableTemplate.flatte的签名为: def flatten[B](implicit asTraversable : (A) => Traversable[B]) : CC[B] 为什么后一种方法(
TraversableLike.flatMap
的签名如下:
def flatMap[B, Th](f : (A) => Traversable[B])(implicit bf : CanBuildFrom[Repr, B, Th]) : Th
GenericTraversableTemplate.flatte
的签名为:
def flatten[B](implicit asTraversable : (A) => Traversable[B]) : CC[B]
为什么后一种方法(在我看来,它与flatMap
的区别仅在于变换器函数是隐式的
)不能在上定义为:
def flatten[B, Th](implicit asTraversable: (A) => Traversable[B],
implicit bf : CanBuildFrom[Repr, B, Th]) : Th
这一定是有原因的吗?我认为答案在于源代码:
def flatten[B](implicit asTraversable: A => /*<:<!!!*/ Traversable[B]): CC[B]
def展平[B](隐式可转换:A=>/*
flatte
的隐式参数实际上应该是Scala 2.7或2.8?集合库在2.8中进行了大量修改。我不仅将问题标记为2.8,而且它引用了2.7中甚至不存在的可遍历特性!