Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure中的多面手定义——第一场比赛第一次发球?_Clojure_Overloading_Arity_Defn - Fatal编程技术网

Clojure中的多面手定义——第一场比赛第一次发球?

Clojure中的多面手定义——第一场比赛第一次发球?,clojure,overloading,arity,defn,Clojure,Overloading,Arity,Defn,具体来说,在以下情况下应该发生什么: (defn avg ([] 0) ([& args] (/ (reduce + args) (count args)))) (avg) i、 例如,我可以依靠clojure始终返回0而不是除以0吗?您可以依靠clojure返回0而不是除以0。但这不是第一场比赛,先发: (defn avg ([& args] (/ (reduce + args) (count args))) ([] 0)) (avg) ; 0 如前所述

具体来说,在以下情况下应该发生什么:

(defn avg
  ([] 0)
  ([& args] (/ (reduce + args) (count args))))

(avg)
i、 例如,我可以依靠clojure始终返回0而不是除以0吗?

您可以依靠clojure返回0而不是除以0。但这不是第一场比赛,先发:

(defn avg
  ([& args] (/ (reduce + args) (count args)))
  ([] 0))

(avg)
; 0

如前所述,特定的arity优先于rest参数

在REPL中尝试时会发生什么?谢谢。我相信你,但我看不到,或者说不理解,这样的描述。你指的是:“一个且只有一个重载本身可以是可变的,方法是指定与,后跟一个rest参数。当使用超过位置参数的参数调用此变量入口点时,将在rest参数中包含的seq中找到它们。如果提供的参数未超过位置参数,则rest参数将为零。“@manualcrank我的解释是:只有当参数多于任何显式算术包含的参数时,才是与rest参数匹配的版本(在进一步解释之前,我需要睡眠:().好的,这在这里也有意义,即本例中不采用可变输入点,因为没有参数不超过零位置参数。