接受一个可变集合,并承诺不更改它



通常,如果我想在方法中"承诺"不会更改传递的参数,我会接受它作为一个不可变的集合。然而,我希望允许调用者传递一个可变集合,但仍然在我的方法中承诺无论如何都不会更改它。

我说的是IndexedSeq

大多数(如果不是全部的话(具有可变版本和不可变版本的集合都有一个公共的超类。

在你的IndexedSeq的情况下,它是特征scala.collection.IndexedSeq

def foo(seq: scala.collection.IndexedSeq) = ...

将接受CCD_ 4和CCD_。

scala.collection.IndexedSeq也没有修改集合的方法。

但是这不是一个保证,因为你仍然可以做这样的事情:

def foo(seq: scala.collection.IndexedSeq) = seq match {
  case s: scala.collection.mutable.IndexedSeq => ... //use modifying methods on s
  case _ => ... //whatever
}

最后,您仍然可以访问可能更改状态的方法。其优点是,您必须(主动(匹配它,以便访问这些方法。所以只有当你意识到这一点时,你才能做到

承诺?取决于你。。

最新更新