Fantom支持provably immutable课程。知道一个类是不可变的编译器的优点必须是众多的,其中最重要的是保证在actor之间传递不可变的消息。 Fantom的方法似乎很简单 - 它对Scala有什么困难?
答案 0 :(得分:12)
Scala方面对追踪副作用的兴趣更大,这是一个比单纯不变性更难的命题。
不可变性本身并不像引用透明度那样重要,事实上,Scala的一些不可变集合不会通过“经过验证的不可变”测试,因为实际上它们不是。就任何人都可以从外部观察而言,它们是不可变的,但是它们具有用于各种目的的可变字段。
一个这样的例子是List
的子类::
(构成列表中所有内容但是空列表的类),其中head
和{{1}的字段实际上是可变的。这样做是为了使tail
能够以FIFO顺序高效组合 - 请参阅List
及其ListBuffer
方法。
无论如何,虽然保证不变性会很有意思,但这些东西实际上更像是一种默认可变性的语言工具。根据我的经验,在Scala编程时,它并没有成为一个实际问题。
答案 1 :(得分:1)
虽然这种方法可能很简单,但