【发布时间】:2018-09-06 04:13:58
【问题描述】:
我今天了解到 scala 的 Seq 可能意味着可变或不可变 Seq 都可以满足其类型别名。 (我偶然发现了一个 blogpost 在谈论它。)
在我的代码库中,我尝试遵循函数式编程最佳实践,虽然我确实假设 Seq 强制执行不可变序列,但它可能不是,因此会导致意外副作用的入口点。
为了防止可变序列,我可以使用序列键入我的函数:
scala.collection.immutable.Seq 在我期待Seq 的每个文件中。
我也不喜欢在我的代码库中阅读immutable.Seq。
对我来说,Seq 的行为应该与 Set 别名一样,并且默认情况下是不可变的。
有没有一种方法可以让默认的 Seq 别名指向我的项目的不可变副本,而不妨碍供应商导入?
【问题讨论】:
-
为什么说
Seq默认是可变的?collection.mutable.Seq有update()方法,但collection.Seq没有。 -
是的,我在这里遗漏了什么吗?我已经使用
Seq有一段时间了,但从未见过它可变的地方。我们说的是从Seq.apply(1, 2, 3)返回的Seq对吧? -
@jwvh 我重新表述了我的问题。
-
@JordanCutler 我说的是这里指出的内容:orrsella.com/2014/02/27/…
标签: scala functional-programming sequence immutability seq