Scala でメモ化を行う方法を調べていると、理解できないコードがいくつか見つかりました。私はこの特定の「もの」を調べようとしましたが、それを何と呼ぶべきかわかりません。つまり、それを参照する用語です。さらに、記号を使用して検索するのは簡単ではありません。
ここで、Scala でメモ化を行う次のコードを見ました。
case class Memo[A,B](f: A => B) extends (A => B) {
private val cache = mutable.Map.empty[A, B]
def apply(x: A) = cache getOrElseUpdate (x, f(x))
}
そして、私を混乱させているのはケースクラスが拡張しているものですextends (A => B)
。まず、何が起こっているのですか?第二に、なぜそれが必要なのですか?最後に、この種の継承を何と呼びますか。つまり、それを参照するために使用できる特定の名前または用語はありますか?
次に、ここでフィバノッチ数を計算するためにこのように使用されるメモを見ています。
val fibonacci: Memo[Int, BigInt] = Memo {
case 0 => 0
case 1 => 1
case n => fibonacci(n-1) + fibonacci(n-2)
}
適用されている「単純化」のすべてを見ていないのはおそらく私です。しかし、私はval
行の終わりを把握することができません= Memo {
. したがって、これをより詳細に入力すると、Memo がどのように構築されているかについての「飛躍」が理解できるでしょう。
これに関するご支援をいただければ幸いです。ありがとうございました。