WrappedString Scaladoc 2.8.1:

“此类充当包装字符串,以索引序列中发现的所有操作来扩展String。
此类与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,map返回一个Vector而不是WrappedString。如果我正确理解:

过滤器可以工作,因为它仅使用newBuilder方法,但是地图需要WrappedString的隐式CanBuildFrom,就像BitSet一样。这是代码或文档中的错误,还是我缺少什么?

另外,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


最佳答案

第一个是错误,应该在2.9中修复。

09-06 10:15