请在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 (由 seancorfield 报告的)
...