【发布时间】:2017-03-02 13:56:01
【问题描述】:
这是一个记忆/缓存中间结果的函数:
def memoize[I, O](f: I => O) = new scala.collection.mutable.HashMap[I, O]() {
override def apply(key: I): O = getOrElseUpdate(key, f(key))
}
这适用于下面的代码,
val double: Int=>Int = memoize {
_*2
}
但是,当我尝试使用元组作为输入参数(I)时,它显示编译时错误,
val isGivenNumIsHead:(List[Int], Int) => Boolean = memoize {
case (Nil, _) => false
case (a:: as, n) => a == n
}
编译时错误是:
mutable.HashMap[Nothing, Boolean] {def apply(key: Nothing): Boolean} 类型的表达式不符合预期类型 (List[Int], Int) => Boolean
这与擦除有关吗?
我该如何解决?
【问题讨论】:
-
我很困惑。
memoize返回一个HashMap[O, I],但您想返回一个函数类型:(List[Int], Int]) => Boolean?