有什么方法可以存储在前提条件下执行的计算结果,以便可以在实际的函数体中使用它。
这太糟糕了(昂贵的计算运行两次):
(defn bar [x]
{:pre [(> (costly-computation x) 1337)]}
(costly-computation x))
我想做一些类似的事情。但这不起作用。
(defn smartbar [x]
(let [res (costly-computation x)]
{:pre [(> res 1337)]}
res))
最佳答案
您有多种方法可以解决这个问题。例如,您可以在 (bar) 函数外部计算 (coSTLy-computation x) 并将其作为参数传递给 (bar) 函数。
或者您可以在 (bar) 函数内计算 (coSTLy-computation x) 并在那里进行验证,没有 {:pre} 条件。
或者编写一个宏来完成您想要的操作!
您的智能栏将无法工作,因为这不是创建 defn 宏的目的。
在 REPL 中尝试一下:
(source defn)
关于optimization - 具有局部变量的 Clojure 前提条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20468484/