在我的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"))
我希望text
行中的"empty"
变量始终停止后续匹配(如果匹配)并返回"空"。然而,可能因为这个子句更通用,它会将它作为最后一个并将其与另一个匹配。
答案 0 :(得分:3)
core.match对正则表达式的支持位于一个单独的命名空间clojure.core.match.regex
中。在功能编译之前,您需要 ,以使其按照您期望的方式工作。最简单,最简单且最不容易出错的方法是在您定义函数的命名空间的:require
子句中添加适当的ns
子句。
此外,模式匹配总是按顺序尝试子句。如果从不同于预期的子句获得返回值,则意味着该子句实际上与您的参数不匹配。
答案 1 :(得分:0)
据我所知,core.match不支持任何“特殊”方式的正则表达式作为匹配变量。也就是说,如果text
实际上是一个正则表达式,那么你的第一个子句可能匹配,但如果它是一个字符串匹配一个正则表达式,它将会失败。