varを持っていても、純粋関数型になる例が出ている。
http://d.hatena.ne.jp/plasticscafe/20100906/1283745561
を参考にさせていただいた。
class Keyd {
def computeKey: Int = ...//この処理には時間がかかる
...
}
class MemoKeyed extends Keyd {
private var keyCache :Option{Int] =None
override def computeKey: Int = {
if (!keyCache.isDefined) keyCache = Some(super.computeKey)
keyCache.get
}
}
①MemoKeydのcomputeKeyでは、一回目はkeyCacheがないので、スーパークラスの
computeKeyメソッドで処理した値がkeyCacheに入る。keyCacheからデータが取り出される。
②二回目は、スーパークラスのcomputeKeyメソッドで処理はとばして、一回目に入れていた
値が、keyCacheから取り出される。
①、②いずれにしろ、同じ値がcomputeKeyからは、出てくるということで、純粋関数型とみなせる
ということのようだ。
0 件のコメント:
コメントを投稿