对于具有变长参数的 defn:如果调用时缺少固定参数,则它们将使用变长方法而不是错误;如果调用时使用的是最大固定参数,将调用变长方法而不是固定形式。
`
(defn f-hole
([a] 1)
([a b c d & args] "4或更多"))
(f-hole 1 2) ; =>"4或更多",应当是错误
(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 错误的方法是将带有无签名或参数数小于最大固定参数数的所有 X 生成 "case X:" 语句到 switch 语句中。
我对 f-overlap-mfa 的行为不确定为什么,也没有深入研究。