You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Clojure中('+ 1 2)返回2、传3参报错的原因及运行机制?

Clojure中('+ 1 2)与('+ 1 2 3)的行为差异解析

先看REPL中的执行结果:

('+ 1 2) ; 输出 2
('+ 1 2 3) ; 报错 clojure.lang.ArityException: Wrong number of args (3) passed to: clojure.lang.Symbol

背后的运行机制

  1. '+的本质:'+是一个clojure.lang.Symbol实例,也就是代表+这个名称的符号对象,而非加法函数。Clojure里的单引号是阻止求值的语法,所以这里不会把+解析成加法函数,而是直接返回符号本身。

  2. 符号作为函数的调用规则:Clojure的符号类实现了IFn接口,允许被当作函数调用,但它只支持两种参数数量:

    • 传1个参数时:(符号 参数)直接返回这个参数
    • 传2个参数时:(符号 参数1 参数2)直接返回第二个参数
    • 传超过2个参数时:由于符号类没有实现对应参数数量的调用方法,就会抛出参数不匹配的ArityException
  3. 对应示例的解释:

    • ('+ 1 2)是2个参数的调用,所以直接返回第二个参数2
    • ('+ 1 2 3)传了3个参数,超出符号支持的参数数量范围,因此触发报错

内容的提问来源于stack exchange,提问作者rusfrompiter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 19:59:59