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

欢迎!请参阅关于页面以了解更多有关这一功能的信息。

0
错误

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

虽然一旦你知道查找行为,这是"一致性"的,但对于Clojure新手来说,这很令人困惑,这似乎不是一个有用的行为。

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