语境
考虑以下代码
(defprotocol ICat "Foo"
(meow [cat]))
(defrecord Cat [a b] "Cat"
ICat
(meow [cat] (some-expensive-operation a b)))
问题
有没有办法我可以在某个地方放一个让?
我希望 (some-expensive-operation ab) 在我执行时只评估一次
(->Cat a b)
这样在 (meow cat) 的时候,它只是返回预缓存的值,而不是动态地重新计算它。例如:
[1] (let [x (->Cat a b)]
[2] (meow x)
[3] (meow x)
[4] (meow x))
我希望(一些昂贵的操作)在 [1] 处被评估一次,然后对于 [2]、[3]、[4] 它只返回旧值。