【发布时间】:2011-12-24 18:45:03
【问题描述】:
我正在创建一个简单的缓存特征(以轻松缓存我的函数):
trait Cache[A,B] {
def _calc(v:A):B
private var cache = Map[A,B]()
def calc(v:A):B = {
cache.get(v) match {
case Some(x) => x
case None =>
val x = _calc(v)
cache += (v -> x)
x
}
}
}
用法:
object Sol extends Cache[Int,Int] {
def _calc(v:Int):Int = { /* do something here */ }
}
Sol.calc(5)
它可以正常工作,但是当我需要缓存具有更多参数的函数时就会出现问题 - 所以我需要开发 trait Cache2、Cache3,所有从第一个 trait 复制粘贴代码。
可能的解决方法是将具有多个参数的函数转换为接受元组的函数,但这似乎不正确。
有没有办法更普遍地做到这一点并避免DRY principle违规?
【问题讨论】:
标签: scala