2024年Clojure调查问卷!中分享您的想法。

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

+2
Spec

我支持开放映射哲学,但在正则表达式环境中,如果s/keys*因为下一个是关键词后跟任何?而继续解析,则会出现问题。在正则表达式环境中,开放映射哲学真的增加了价值吗?

示例

(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提供额外的断言。

...