У меня есть существующий класс с методом экземпляра buildHierarchyUncached, подпись которого может быть найдена ниже.Функция Memoization В Kotlin
private fun buildHierarchyUncached(date: LocalDate): Node { ... }
Я хотел бы предоставить публичный функции buildHiearchy, которая является memoized версии buildHierarchyUncached. Я могу приблизиться к тому, что я хочу:
val buildHiearchy = Memoize<LocalDate, Node>({buildHierarchy(it)})
который можно назвать как:
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) })
}
}
Я хотел бы иметь возможность объявить memoized функцию функция вместо свойства, которая не является огромной сделкой, хотя я считаю, что она помогает читаемости. Как это:
fun buildHierarchy(date: LocalDate): Node = Memoize<LocalDate, Node>({ buildHierarchyUncached(it)})
но что не компилируется: ". Тип рассогласования Обязательный узел Found memoize."
Кроме того, почему это не компилируется?
val buildHiearchy = Memoize<LocalDate, Node>({(date) -> buildHierarchy(date)})
Для вещей, которые имеют ошибки компилятора, приятно включить сообщение об ошибке из компилятора, чтобы другие могли искать/находить этот вопрос. –
Добавлена ошибка компиляции, которую я получал. –