了解可变的Seq

时间:2017-06-07 14:26:24

标签: scala collections

我对Scala很新,并尝试了解可变Seq。因为它在包mutable中,我期望有一种方法允许我们在不复制整个集合的情况下追加元素。

+=中没有mutable.Seq方法,但Buffer中有:+方法。 +:protected override async Task RunAsync(CancellationToken can) { //do work as described above Task ignored = Task.Factory.Run(async ()=>{ await s_FabricClient.ServiceManager.DeleteServiceAsync(/*blah blah*/); } await Task.Delay(30000); } 都会复制该集合。

那为什么它是可变的?

2 个答案:

答案 0 :(得分:26)

因为mutablegrowable不是同一回事。 (后者是前者的一种特定类型:一切都是可变的,但不是所有可变的东西都是可变的。)

mutable.Sequpdate,允许您更改给定索引处的元素,但不会增大或缩小。 BufferSeq的专业化,既可变又可成长。

答案 1 :(得分:4)

正如documentation中所述,mutable.Seqcollection.Seq添加了更新方法。另一方面,+=Growable中定义。

在Scala标准库中,大多数可变集合扩展了不可变版本,这就是它们继承复制:++:的原因。