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

欢迎!请访问关于页面查看更多关于此功能的信息。

0
错误

('+ 1 2) ;; 返回2,因为这被视为(get 1 '+ 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](https://clojure.atlassian.net/browse/CLJ-969)(由 seancorfield 报告)
...