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参数匹配的版本(在进一步解释之前,我需要睡眠:().好的,这在这里也有意义,即本例中不采用可变输入点,因为没有参数不超过零位置参数。