Scala:已弃用的集合差异的替代方案

Scala: Alternative for deprecated set difference

我需要从母版中删除一些集 set。以下代码显示了我打算使用的概念,但它正在生成弃用警告。 Scala 给出的建议没有用,因为我想重复更新主集。有人可以提出一个简单的替代方案吗?

scala> var setM = scala.collection.mutable.Set[Int](1, 2, 3, 4, 5)
setM: scala.collection.mutable.Set[Int] = HashSet(1, 2, 3, 4, 5)

scala> var setX = scala.collection.mutable.Set[Int](3, 4)
setX: scala.collection.mutable.Set[Int] = HashSet(3, 4)

scala> setM = setM -- setX
                   ^
       warning: method -- in trait SetOps is deprecated (since 2.13.0): Consider requiring an immutable Set mutated setM

scala> setM
res0: scala.collection.mutable.Set[Int] = HashSet(1, 2, 5)

警告很清楚:

method -- in trait SetOps is deprecated (since 2.13.0): Consider requiring an immutable Set

可见here。你可以用不可变集做同样的事情:

var setM = Set(1, 2, 3, 4, 5)
val setX = Set(3, 4)
setM = setM -- setX
println(setM)

代码 运行 在 Scastie

话虽如此,在 Scala 中不推荐使用 vars。我会这样做:

val setM = Set(1, 2, 3, 4, 5)
val setX = Set(3, 4)
val updatedSetM = setM -- setX
println(updatedSetM)

结果为:

HashSet(5, 1, 2)

代码 运行 在 Scastie