【发布时间】:2012-05-27 23:07:19
【问题描述】:
上下文
考虑下面这段代码
(defprotocol ICat "Foo"
(meow [cat]))
(defrecord Cat [a b] "Cat"
ICat
(meow [cat] (some-expensive-operation a b)))
问题
有什么方法可以让我在某个地方放一个 let 吗?
我希望 (some-expensive-operation a b) 在我执行时只评估一次
(->Cat a b)
这样在(喵喵)的时候,它只是返回预先缓存的值,而不是动态地重新计算它。比如:
[1] (let [x (->Cat a b)]
[2] (meow x)
[3] (meow x)
[4] (meow x))
我希望 (some-expensive-operation) 在 [1] 处只计算一次,然后对于 [2]、[3]、[4] 它只返回旧值。
【问题讨论】:
标签: clojure