Clojure符号用作函数时做什么?

Clojure符号用作函数时做什么?,clojure,Clojure,在试图解决涉及重新实现评估的4Clojure问题“”时,我意外地调用了如下内容: (apply '/ '(16 8)) 而不是预期的: (apply / '(16 8)) 这产生了令人困惑的副作用,返回8,这让我觉得我把数学搞砸了 我后来在调试后意识到了我的错误——在尝试调用/符号之前,我没有评估它,因此意识到clojure.lang.symbol必须实现clojure.lang.IFn。但这种实现能做什么呢?我所能做的就是返回带有一个参数的nil,如果给定了第二个参数,则返回第二个参数。符

在试图解决涉及重新实现评估的4Clojure问题“”时,我意外地调用了如下内容:

(apply '/ '(16 8))
而不是预期的:

(apply / '(16 8))
这产生了令人困惑的副作用,返回
8
,这让我觉得我把数学搞砸了

我后来在调试后意识到了我的错误——在尝试调用
/
符号之前,我没有评估它,因此意识到
clojure.lang.symbol
必须实现
clojure.lang.IFn
。但这种实现能做什么呢?我所能做的就是返回带有一个参数的
nil
,如果给定了第二个参数,则返回第二个参数。

符号在地图中查找自己,就像关键字一样。见:

RT
is,它几乎做所有事情。“运行时”?)

在给出的示例中,查找失败(因为16不是映射),因此将返回
notFound
值(8)。

的可能重复项
…
122 public Object invoke(Object obj) {
123         return RT.get(obj, this);
124 }
125
126 public Object invoke(Object obj, Object notFound) {
127         return RT.get(obj, this, notFound);
128 }
…