在研究如何在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))
}
对我来说令人困惑的是,case类正在扩展extends (A => B)
部分。首先,发生了什么?其次,为什么需要这样做?最后,你称这种继承方式为什么名称或术语?
接下来,我看到Memo在此处被用于计算Fibanocci数。
val fibonacci: Memo[Int, BigInt] = Memo {
case 0 => 0
case 1 => 1
case n => fibonacci(n-1) + fibonacci(n-2)
}
可能是我没有看到所有被应用的“简化”。但是,我无法弄清楚 val
行的结尾,= Memo {
。所以,如果这个代码被更冗长地打出来,也许我就能理解关于如何构建Memo的“飞跃”。
非常感谢您提供的任何帮助。谢谢。