Scala'nın Set
hiyerarşi biraz garip, ama sadece vb Set[Int]
beklediği bir yöntem,
bir BitSet
geçebilir yüzden, bir süper türü olarak Set[Int]
sahiptir BitSet
Eğer durum bu olmayabilir varsayılan olarak Set
varsayılan olarak Set
olsun (scala.collection
altında), kullandığınız kitaplığıile, immutable.BitSet
değil, doğrudan çalışıyor olabilir. Bu, örnek kodunuzda her şeyin immutable
olduğu durum için geçerli değil, ancak bunun ne kadar basit olduğundan emin değilim. Bir scala.collection.BitSet
var nasılsa, sadece kullanmak,
scala> import scala.collection.immutable.BitSet
import scala.collection.immutable.BitSet
scala> val bs = BitSet(0, 100, 200)
bs: scala.collection.immutable.BitSet = BitSet(0, 100, 200)
scala> def takesSet(s: Set[Int]): Int = s.size
takesSet: (s: Set[Int])Int
scala> takesSet(bs)
res0: Int = 3
:
sen şanslı iseniz
Set
ve
BitSet
hem
immutable
paketin sürümleri,
BitSet
Set
için yön önemsiz ile çalışmaktan
toSet
: diğer yönde için
scala> takesSet(scala.collection.BitSet(0, 100, 200).toSet)
res1: Int = 3
, sürüm gayet:
scala> val s = Set(1, 2, 3)
s: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
scala> BitSet(s.toSeq: _*)
res2: scala.collection.immutable.BitSet = BitSet(1, 2, 3)
Ama birçok durumda bazı CanBuildFrom
sihirli bu dönüşümü önleyebilirsiniz fazlalaştı var:
scala> val bs: BitSet = BitSet(Set("1", "2", "3").map(_.toInt).toSeq: _*)
bs: scala.collection.immutable.BitSet = BitSet(1, 2, 3)
Ama bunun yerine:
scala> val bs: BitSet = Set("1", "2", "3").map(_.toInt)(collection.breakOut)
bs: scala.collection.immutable.BitSet = BitSet(1, 2, 3)
Bu aşağıdaki aynı sonucu üretir BitSet
'dan önce bir ara kümenin (ve dizinin) oluşturulmasıyla, collection.breakOut
parametresi, derleyicinin haritayı CanBuildFrom
örneğini kullanarak gerçekleştirmesini söyler BitSet
doğrudan yapacak tip sınıf. CanBuildFrom
örneğini bu şekilde açıkça iletmek, yalnızca map
için değil, flatMap
, scanLeft
, ++
ile çalışacak ve öğe türünü değiştirmenize izin veren diğer koleksiyon işlemleri.
İkincisi, '.toSet' veya' .seq' çalışmalıdır – Bergi
Belki [Bir aralıktan bir scala BitSet'i başlatma] (http://stackoverflow.com/q/6366976/1048572) ilk yardım için – Bergi