在clojure中何时使用'constanced',如何以及何时评估其论点?
在另一个问题的公认答案中,经常使用clojure函数在clojure中何时使用'constanced',如何以及何时评估其论点?,clojure,evaluation,Clojure,Evaluation,在另一个问题的公认答案中,经常使用clojure函数 的定义通常是这样的: (defn constantly "Returns a function that takes any number of arguments and returns x." {:added "1.0"} [x] (fn [& args] x)) doc字符串说明了它的功能,但没有说明使用它的原因 在上一个问题的答案中,经常使用的用法如下: (declare version) (defn -mai
的定义通常是这样的:
(defn constantly
"Returns a function that takes any number of arguments and returns x."
{:added "1.0"}
[x] (fn [& args] x))
doc字符串说明了它的功能,但没有说明使用它的原因
在上一个问题的答案中,经常使用的用法如下:
(declare version)
(defn -main
[& args]
(alter-var-root #'version (constantly (-> ...)))
(do-stuff))
因此,将直接对Continuous返回的函数的结果进行求值。我不知道这有什么用。我可能不理解在“持续性”中使用和不使用“持续性”时如何评估x
我应该在什么时候经常使用以及为什么需要使用它?当API需要一个函数而您只需要一个常量时,经常使用函数非常有用。问题中提供的示例就是这种情况
大多数alter-*
函数(包括altervar root
)都使用一个函数,以允许调用方根据其旧值修改某些内容。即使您只希望新值为7(忽略旧值),您仍然需要提供一个函数(仅提供7将导致尝试对其求值,这将失败)。所以你必须提供一个只返回7的函数<代码>(持续7)
只生成此函数,省去了定义它所需的工作量
编辑:至于问题的第二部分,恒
是一个普通函数,因此在构造恒函数之前对其参数进行求值。因此(constanced@myref)
始终返回调用constanced
时myref
引用的值,即使以后更改了该值