在Scala 2.8中,有一个对象scala.collection.package.scala:
def breakOut[From, T, To](implicit b : CanBuildFrom[Nothing, T, To]) =
new CanBuildFrom[From, T, To] {
def apply(from: From) = b.apply() ; def apply() = b.apply()
}
Run Code Online (Sandbox Code Playgroud)
我被告知这会导致:
> import scala.collection.breakOut
> val map : Map[Int,String] = List("London", "Paris").map(x => (x.length, x))(breakOut)
map: Map[Int,String] = Map(6 -> London, 5 -> Paris)
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?为什么breakOut被称为我的论据List?
我想初始化一个scala BitSet来包含从1到N的整数.以下内容可行,但我正在寻找更好的解决方案:
var s = BitSet.empty ++ (1 to n)
Run Code Online (Sandbox Code Playgroud)
我希望我可以这样做:
var s:BitSet = (1 to n).toSet
Run Code Online (Sandbox Code Playgroud)
......但是会导致错误:
error: polymorphic expression cannot be instantiated to expected type;
found : [B >: Int]scala.collection.immutable.Set[B]
required: scala.collection.immutable.BitSet
Run Code Online (Sandbox Code Playgroud)
我错过了一些明显的东西吗