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

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

+1
Spec
命名空间中的(keys)解构(参见CLJ-1919)支持`::foo/keys`或`::foo/syms`中的任何标识符,但核心规范只能说只允许`simple-symbol?`。

示例


user=> (let [{::keys [:foo]} {::foo 1}] foo)
在(REPL:1:1)处展开宏时出现语法错误。
...一大堆规范问题


预期


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


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

3 个答案

0
_由: thheller_发表的评论

{{ident?}}接受命名空间的键词(和符号),考虑到当前实现会忽略命名空间并使用“keys”使用的命名空间,可能不应允许。为了避免混乱,我认为规范应限制为{{simple-keyword?}}或{{simple-symbol?}},在命名空间的"keys"情况下,而仅接受{{ident?}}用于非命名空间的{{:keys}}。


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

由: alexmiller 发表的评论

我考虑了这一点,并决定匹配代码。此外,与:keys也具有一致性。

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