scala.collection.immutable.WrappedString需要一个隐式的CanBuildFrom来实现记录的功能吗?

时间:2011-02-09 15:57:18

标签: scala scala-2.8 scala-collections

WrappedString Scaladoc 2.8.1:

“此类用作增强字符串的包装器,其中包含索引序列中的所有操作。 这个类和StringOps之间的区别在于,调用转换器方法(如filter和 map)将产生一个WrappedString 类型的对象,而不是String“

  scala> import scala.collection.immutable.WrappedString
  import scala.collection.immutable.WrappedString

  scala> val s = new WrappedString("foo")               
  s: scala.collection.immutable.WrappedString = WrappedString(f, o, o)

  scala> s.filter(x => true)
  res1: scala.collection.immutable.WrappedString = WrappedString(f, o, o)

  scala> s.map(x => x)                                  
  res2: scala.collection.immutable.IndexedSeq[Char] = Vector(f, o, o)

唉,map返回Vector而不是WrappedString。如果我理解正确的话:

过滤器可以工作,因为它只是使用newBuilder方法,但是像BitSet一样,map需要一个隐式的CanBuildFrom用于WrappedString。这是代码或文档中的错误还是我遗漏了什么?

此外,scaladoc简化版对我没有任何意义:

def map [B] (f: (Char) ⇒ B) : WrappedString[B]
def map [B, That] (f: (Char) ⇒ B)(implicit bf: CanBuildFrom[WrappedString, B, That]) : That

不应该是:

def map [B] (f: (Char) ⇒ Char) : WrappedString
def map [B, That] (f: (Char) ⇒ B)(implicit bf: CanBuildFrom[WrappedString, B, That]) : That

1 个答案:

答案 0 :(得分:1)

第一个是一个bug,一个将被修复为2.9。