Fantom 支持可证明的不可变类。编译器知道一个类是不可变的,其优势肯定是很多的,其中最重要的一点是可以保证在参与者之间传递不可变的消息。Fantom 的方法似乎很简单——它会给 Scala 带来什么困难?
问问题
139 次
2 回答
12
Scala 方面对跟踪副作用更感兴趣,这是一个比简单的不变性更难的命题。
不可变性本身并不像引用透明性那么重要,事实上,Scala 的一些不可变集合不会通过“已证明不可变”的测试,因为事实上它们不是。就任何人都可以从外部观察到的而言,它们是不可变的,但它们具有用于各种目的的可变字段。
一个这样的例子是List
's 的子类::
(构成列表中除空列表之外的所有内容的类),其中的head
和字段tail
实际上是可变的。这样做是为了使 aList
可以按 FIFO 顺序有效地组合 - 请参阅ListBuffer
及其toList
方法。
无论如何,虽然保证不变性会很有趣,但这些东西实际上更像是一种语言的产物,其中可变性是默认设置。根据我的经验,在 Scala 中编程时,它不会成为一个实际问题。
于 2013-02-14T14:59:22.607 回答
1
虽然方法可能很简单,
- 它的保证可以被反射打破;
- 这需要相当多的努力,Scala 团队可能认为这不值得或不是优先事项。
于 2013-02-14T14:59:53.417 回答