请在2024 Clojure状态调查!中分享您的想法。

欢迎!请参阅关于页面了解更多关于它是如何工作的信息。

0 投票
错误

('+ 1 2) ;; 因为它被当作 (get 1 '+ 2) 处理,返回 2

虽然一旦你知道查找行为就“一致”,但对于Clojure新手来说可能会让人困惑,这似乎是一种不实用的行为。

提议:修改Keyword.invoke()和Symbol.invoke(),将第一个Object参数限制为ILookup、Map或IPersistentSet(或null)实例,以便“未找到”行为不会产生非直观的行为。

这应该跟踪CLJ-1107。

哟,我前些日子遇到了这个问题,让我有些措手不及。如果像提议的补丁那样有一个错误消息,那就非常有助于了。
我非常担心将此现有、正常、一致的行为变成错误,这将会破坏现有代码(无论这种代码看起来多么奇怪)。
经过思考,你是对的,这个行为是一致的,改变它不仅会是一个破坏性变革,而且也是一个相当大的逆转预期。

3 个回答

0 投票
by

评论由zjhmale发表

修复此问题的补丁

0 投票
by

评论由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)

其他一切工作正常

0 投票
by
参考:https://clojure.atlassian.net/browse/CLJ-969 (由seancorfield报告)
...