Tôi có một lớp hiện có với một phương thức thể hiện buildHierarchyUncached có chữ ký có thể được tìm thấy bên dưới.Chức năng ghi nhớ Trong Kotlin
private fun buildHierarchyUncached(date: LocalDate): Node { ... }
tôi muốn cung cấp một công chức năng buildHiearchy đó là một phiên bản memoized của buildHierarchyUncached. Tôi có thể lấy gần với những gì tôi muốn:
val buildHiearchy = Memoize<LocalDate, Node>({buildHierarchy(it)})
nào có thể được gọi như:
hierarchyService.buildHiearchy(businessDate)
Sử dụng:
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) })
}
}
Tôi muốn để có thể khai báo hàm memoized như một chức năng thay vì một tài sản, mà không phải là một vấn đề lớn, mặc dù tôi nghĩ rằng nó giúp dễ đọc. Như thế này:
fun buildHierarchy(date: LocalDate): Node = Memoize<LocalDate, Node>({ buildHierarchyUncached(it)})
nhưng không biên dịch: "Loại không phù hợp. Yêu cầu nút. Tìm thấy ghi nhớ".
Ngoài ra, tại sao bản dịch này không biên dịch?
val buildHiearchy = Memoize<LocalDate, Node>({(date) -> buildHierarchy(date)})
Đối với những thứ có lỗi trình biên dịch, bạn nên đưa thông báo lỗi từ trình biên dịch để người khác có thể tìm kiếm/tìm câu hỏi SO này. –
Đã thêm lỗi biên dịch mà tôi đã nhận được. –