Martin Odersky は Scala Days 2013 の基調講演を行いました。
1 つのスライドのタイトルは、「オブジェクトが可変になるのはいつですか?」というものでした。その内容は次のとおりです。
class Memo[T, U](fn: T => U) {
val memo = new mutable.WeakHashMap[T, U]
def apply(x: T) = memo.getOrElseUpdate(x, fn(x))
}
// an object is mutable if its (functional) behavior depends on its history
new Memo {i: Int => i + 1} // immutable
var ctr = 0;
new Memo { i: Int => ctr += i; ctr } // mutable
メモの例がそれぞれ不変および可変である理由を説明してください。