Clojure 2024调查问卷!中分享你的想法。

欢迎!请查阅关于页面,了解有关该功能的更多信息。

0
ClojureScript

对于具有变长参数数量的定义函数:如果用缺失的固定参数数量调用,则它们使用变长方法而不是报错;如果用最大固定参数数量调用固定参数,则调用固定形式的方法而不是变长方法。

`
(defn f-hole
([a] 1)
([a b c d & args] "4 or more"))

(f-hole 1 2) ; =>"4 or more", 应该报错

(defn f-overlap-mfa
([a b] 2)
([a b & c] "2+"))

(f-overlap-mfa 1) ;=> "2+", 应该报错
(f-overlap-mfa 1 2) ;=> "2+", 应该是 2
(f-overlap-mfa 1 2 3) ;=> "2+", 正确
`

解决 f-hole 错误的一种方法是在 switch 语句中为没有签名或小于最大固定参数数量的所有 X 发射 "case X:"。

我对 f-overlap-mfa 发生原因不确定,没有深入调查。

3 答案

0

评论者:favila

抱歉,提交了 CLJ 而不是 CLJS!

0

评论者:rohitaggarwal

对于{{f-overlap-mfa}}的行为如下:

(f-overlap-mfa 1) ;=> "2+" (f-overlap-mfa 1 2) ;=> 2 (f-overlap-mfa 1 2 3) ;=> "2+"

所以两个参数的结果与我(链接:~favila)的不同。

只有一个参数的调用会给出警告。

{{WARNING: for cljs.user/f-overlap-mfa 传递的参数数量不正确(1)}}

0
by
参考: https://clojure.atlassian.net/browse/CLJS-1678(由favila报告)
...