在我的core.match模式中,我希望一个特定的模式具有“高优先级”。例如:
(match
[paragraph line text is-special ]
[_ _ #"^\s*$" _ ] "empty"
[0 0 _ false ] "project-header"
[0 _ _ false ] "project-header-note"
[1 _ _ false ] "next-action"
[2 _ _ false ] "following-action"
:else "generic"))我希望"empty"行中的text变量总是在匹配时停止后续匹配,并返回"empty“。但是,可能是因为这个子句更通用,所以它尝试将其作为最后一个子句,并与另一个子句匹配。
发布于 2013-07-15 10:45:17
lives对正则表达式的支持位于一个单独的名称空间clojure.core.match.regex中。你需要在你的函数编译之前需要它,这样它才能以你所期望的方式工作。最简单、最容易、最不容易出错的方法是在定义函数的命名空间的ns子句中添加适当的:require子句。
此外,模式匹配总是按顺序尝试子句。如果您从一个不同于预期的子句中获得返回值,这意味着该子句实际上与您的参数不匹配。
发布于 2013-07-15 10:15:34
据我所知,core.match不以任何“特殊”的方式支持正则表达式作为匹配变量。也就是说,如果text实际上是一个正则表达式,那么您的第一个子句可能会匹配,但是如果它是一个与正则表达式匹配的字符串,那么它将失败。
https://stackoverflow.com/questions/17645549
复制相似问题