Копаясь в исходный код Scala, определение toBitSet находится в TraversibleOnce.scala:
/** Converts this $coll to a set.
* $willNotTerminateInf
* @return a set containing all elements of this $coll.
*/
def toSet[B >: A]: immutable.Set[B] = immutable.Set() ++ self
Итак, что довольно интересно, реализация toSet в Scala просто делает ваше первое решение за сценой в случае простого Set. Если вы действительно предпочитаете второй синтаксис, который вы предложили для случая BitSet, то вы можете свернуть свой собственный с неявным преобразованием типов:
class BitSetConvertible(t: TraversableOnce[Int]) {
def toBitSet = BitSet.empty ++ t
}
implicit def asBitSetConvertible(t: TraversableOnce[Int]) = new BitSetConvertible(t)
Теперь вы можете делать такие заявления, как:
val s = 1 to 10 toBitSet