2024 Clojure调查 中分享您的想法!

欢迎!请访问 关于 页面以获取更多有关此操作的信息。

0
Errors

('+ 1 2) ;; 返回 2,因为它被视为 (get 1 '+ 2)

虽然这“一致”,一旦你知道查找行为,但对于Clojure新手来说很令人困惑,这似乎是一种无用的行为。

提议:修改Keyword.invoke()和Symbol.invoke(),以将第一个Object参数限制为instanceof 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报告)
...