【发布时间】:2014-01-23 15:37:44
【问题描述】:
我推荐你看这个短代码:
('a 1)
;==> nil
('a 1 2)
;=>2
为什么符号a在这种情况下可以用作函数?
【问题讨论】:
-
我完全理解符号解析在 clojure 中是如何工作的。但我不明白为什么一个符号(绑定我们的未绑定)表现得像一个函数
-
我检查了这两个帖子,我发现符号和关键字可以用作在地图中执行查找的函数。但是为什么上面的代码可以工作,因为它不应该
-
为什么?最简单的答案是因为 clojure.lang.Symbol 实现了 IFn 接口。以这种方式使用它的规则是什么?请参阅 Chiron 的上述链接。为什么他们选择让符号表现得那样?为方便起见。
-
@user3228423 是的,在您的示例中,1 是地图,2 是“未找到”默认值,只要 1 不是地图,则返回未找到的 2
-
如果您想了解这种行为,请查看
get。用作函数的符号有效地调用 get,并且 get 将任何东西作为第一个 arg,如果它无法从中获取某些东西,则简单地返回默认值。(get Double/NaN :a :default)=> :默认