欢迎!请参阅关于页面了解更多关于它是如何工作的信息。
('+ 1 2) ;; 因为它被当作 (get 1 '+ 2) 处理,返回 2
虽然一旦你知道查找行为就“一致”,但对于Clojure新手来说可能会让人困惑,这似乎是一种不实用的行为。
提议:修改Keyword.invoke()和Symbol.invoke(),将第一个Object参数限制为ILookup、Map或IPersistentSet(或null)实例,以便“未找到”行为不会产生非直观的行为。
这应该跟踪CLJ-1107。
评论由zjhmale发表
修复此问题的补丁
目前为止
user=> ('+ 1 2)IllegalArgumentException 类 java.lang.Long无法查找:clojure.lang.Symbol.throwNotLookupable (Symbol.java:127)user=> (:+ 1 2)IllegalArgumentException 类 java.lang.Long无法查找:clojure.lang.Keyword.throwNotLookupable (Keyword.java:103)
其他一切工作正常