如何将此集合从Scala 2.12转换为2.13?

如何将此集合从Scala 2.12转换为2.13?,scala,scala-collections,scala-2.13,Scala,Scala Collections,Scala 2.13,我有一个简单的不可变长基位集,它包含Cardcase类。不幸的是,随着Scala 2.13集合的改进,它不再编译 我已经看过Scala 2.13中的位集实现,但它非常详细。如何在保持代码干净简洁的同时转换此类?是否有这样一个数据结构的演示示例可供我构建 import scala.collection.{GenSet, GenTraversableOnce, SetLike} case class Card(ord: Int) case class Deck(data: Long) exten

我有一个简单的不可变长基位集,它包含
Card
case类。不幸的是,随着Scala 2.13集合的改进,它不再编译

我已经看过Scala 2.13中的位集实现,但它非常详细。如何在保持代码干净简洁的同时转换此类?是否有这样一个数据结构的演示示例可供我构建

import scala.collection.{GenSet, GenTraversableOnce, SetLike}

case class Card(ord: Int)

case class Deck(data: Long) extends Set[Card] with SetLike[Card, Deck] {
    def iterator = new Iterator[Card] {
        var cur = data

        def next = {
            val res = java.lang.Long.numberOfTrailingZeros(cur)
            cur &= ~(1L << res)
            Card(res)
        }

        def hasNext = cur != 0
    }

    override def empty: Deck = Deck.empty
    override def size: Int = java.lang.Long.bitCount(data)
    override def contains(card: Card): Boolean = (data & (1L << card.ord)) > 0
    override def +(card: Card): Deck = Deck(data | (1L << card.ord))
    override def -(card: Card): Deck = Deck(data & ~(1L << card.ord))

    private def toBits(deck: GenTraversableOnce[Card]): Long = deck match {
        case deck: Deck => deck.data
        case _ =>
            var data = 0L
            for (card <- deck) data |= 1L << card.ord
            data
    }

    override def ++(deck: GenTraversableOnce[Card]): Deck = Deck(data | toBits(deck))
    override def &(deck: GenSet[Card]): Deck = Deck(data & toBits(deck))
    override def diff(deck: GenSet[Card]): Deck = Deck(data & ~toBits(deck))
}

object Deck {
    val empty: Deck = Deck(0)
    def of(deck: Iterable[Card]): Deck = empty ++ deck
}
import scala.collection.{GenSet,gentraversableone,SetLike}
案例等级卡(ord:Int)
案例类组(数据:长)使用SetLike[Card,Deck]扩展Set[Card]{
def迭代器=新迭代器[卡]{
var cur=数据
def next={
val res=java.lang.Long.numberOfTrailingZeros(cur)

cur&=~(1L应该是这样的;我已经评论了值得注意的步骤

//SetLike已被SetOps所取代。请注意第3个类型参数-
//这是deck.map(Some())的返回构造函数
案例类组(数据:长)使用SetOps[卡,组,组]扩展集合[卡]{
//集合的最小定义是这两个,而不是符号名
覆盖def incl(卡:卡):卡组=卡组(数据|)(1L