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

欢迎!请查阅关于页面以获取更多关于如何使用本站的信息。

+2
规范

我支持开放映射哲学,但在正则表达式上下文中,如果 s/keys* 因下一个是任何 keyword 后面跟着任何? 继续解析,那么就会有问题。开放映射哲学在正则表达式上下文中真的增加了价值吗?

示例

(s/def ::my-lang (s/cat :opts (s/keys* :opt-un [::opt1 ::opt2])
                        :body (s/* keyword?)))
;; if body consists of two keywords, they will be parsed as opts

1 答案

+1

是的,它在任何提供选项的地方增加价值(这些选项可能是可变的,并随着时间的推移而扩展)。通常,可变参数位于末尾,因此在这一点上没有歧义。

我认为您在这里制定的规范在这方面存在歧义,指定困难的提示正在显示您。我认为通常很难指定的东西是指示您数据存在问题。

仍然有一些更麻烦的方式使用现有的正则表达式运算符来指定这个问题,特别是使用 s/& 以向 opts 提供额外的谓词。

...