我对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);
}
都会复制该集合。
那为什么它是可变的?
答案 0 :(得分:26)
因为mutable
和growable
不是同一回事。
(后者是前者的一种特定类型:一切都是可变的,但不是所有可变的东西都是可变的。)
mutable.Seq
有update
,允许您更改给定索引处的元素,但不会增大或缩小。
Buffer
是Seq
的专业化,既可变又可成长。
答案 1 :(得分:4)
正如documentation中所述,mutable.Seq
向collection.Seq
添加了更新方法。另一方面,+=
在Growable中定义。
在Scala标准库中,大多数可变集合扩展了不可变版本,这就是它们继承复制:+
,+:
的原因。