在clojure中何时使用'constanced',如何以及何时评估其论点?

在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

在另一个问题的公认答案中,经常使用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 -main
  [& args]
 (alter-var-root #'version (constantly (-> ...)))
 (do-stuff))
因此,将直接对Continuous返回的函数的结果进行求值。我不知道这有什么用。我可能不理解在“持续性”中使用和不使用“持续性”时如何评估
x


我应该在什么时候经常使用
以及为什么需要使用它?

当API需要一个函数而您只需要一个常量时,
经常使用
函数非常有用。问题中提供的示例就是这种情况

大多数
alter-*
函数(包括
altervar root
)都使用一个函数,以允许调用方根据其旧值修改某些内容。即使您只希望新值为7(忽略旧值),您仍然需要提供一个函数(仅提供7将导致尝试对其求值,这将失败)。所以你必须提供一个只返回7的函数<代码>(持续7)
只生成此函数,省去了定义它所需的工作量

编辑:至于问题的第二部分,
是一个普通函数,因此在构造恒函数之前对其参数进行求值。因此
(constanced@myref)
始终返回调用
constanced
myref
引用的值,即使以后更改了该值