I have an existing class with an instance method buildHierarchyUncached whose signature can be found below.
private fun buildHierarchyUncached(date: LocalDate): Node { ... }
我想提供一个function的公共buildHiearchy,它是buildHierarchyUncached的记忆版本.我可以接近我想要的:
val buildHiearchy = Memoize<LocalDate, Node>({buildHierarchy(it)})
Which can be called like:
hierarchyService.buildHiearchy(businessDate)
使用:
class Memoize<I, O>(val func: (I) -> O): (I) -> O{
val cache = hashMapOf<I, O>();
override fun invoke(p1: I): O {
return cache.getOrPut(p1, { func(p1) } )
}
}
I would like to be able to declare the memoized function as a function instead of a property, which is not a huge deal, though I think it helps readability. Like this:
fun buildHierarchy(date: LocalDate): Node = Memoize<LocalDate, Node>({ buildHierarchyUncached(it)})
但这没有编译:"类型不匹配.必需的 node .找到Memoize."
还有,为什么不编译?
val buildHiearchy = Memoize<LocalDate, Node>({(date) -> buildHierarchy(date)})