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

欢迎!有关如何运作的更多信息,请参阅关于页面。

+1
规范
命名空间内的:keys 解构(参见CLJ-1919)支持任何`::foo/keys`或`::foo/syms`中的ident类型,但核心规范仅允许`simple-symbol?`。

示例


user=> (let [{::keys [:foo]} {::foo 1}] foo)
在REPL:1:1处宏展开clojure.core/let时发生语法错误。
...大量规范问题


预期


user=> (let [{::keys [:foo]} {::foo 1}] foo)
1


*建议:* 从`simple-symbol?`扩展此情况的规范到`ident?`(代码支持)。
*补丁:* clj-2473.patch

3 个答案

0
评论者:thheller

{{ident?}}接受命名空间关键字(和符号),鉴于当前实现会忽略命名空间并使用"keys"所使用的命名空间,这可能不应该允许。为了避免混淆,我认为规范应仅限于命名空间的"keys"情况下的{{simple-keyword?}}或{{simple-symbol?}},并且仅接受{{ident?}}用于非命名空间的{{:keys}}。


(let [{:foo/keys [:other/bar]} {}])
(let [{:foo/keys [other/bar]} {}])
0

评论者:alexmiller

我考虑过这一点,并决定与代码匹配。与:keys也保持一致。

0
参考: https://clojure.atlassian.net/browse/CLJ-2473(由alexmiller报告)
...