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

欢迎!请参阅关于页面以获取更多有关如何使用此信息的信息。

0
错误

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

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

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

这应与CLJ-1107保持一致。

哎呀,我前几天遇到了这个问题,让我措手不及。像提议的补丁那样的错误消息会非常有用。
我会非常担心将现有的、正在运行的、一致的行为改为错误会破坏现有代码(无论这种代码可能多么奇怪)。
考虑了一下,你是对的,这种行为是一致的,改变它不仅是一个破坏性的变更,而且是一项相当深刻的预期逆转。

3个回答

0

评论者:zjhmale

修复此问题的补丁

0

评论者: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
参考: https://clojure.atlassian.net/browse/CLJ-969(由 seancorfield 报告)
...