欢迎!请参阅关于页面,了解更多关于该页面如何工作的小信息。
('+ 1 2) ;; 返回2,因为它被视为(get 1 '+ 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)
其他一切均正常运行