欢迎!请参阅关于页面以了解更多有关这一功能的信息。
'(+ 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)
其他一切运行正常