从范围初始化scala BitSet

Mik*_*ike 11 scala

我想初始化一个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)

我错过了一些明显的东西吗

kir*_*uku 13

那是什么breakOut:

val s: BitSet = (1 to n).map(identity)(breakOut)
Run Code Online (Sandbox Code Playgroud)

请参阅此问题以了解breakOut的内部工作原理.

另一个解决方案是使用BitSet的构造函数:

val s = BitSet((1 to n): _*)
Run Code Online (Sandbox Code Playgroud)

: _*告诉你要使用的范围为重复参数的编译器.

因为breakOut看起来很难看,你可以使用pimp-my-library模式来生成更好看的代码(如这里所述):

val s = (1 to n).to[BitSet]
Run Code Online (Sandbox Code Playgroud)