core.match模式的优先级

时间:2013-07-15 01:33:09

标签: clojure pattern-matching core.match

在我的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"变量始终停止后续匹配(如果匹配)并返回"空"。然而,可能因为这个子句更通用,它会将它作为最后一个并将其与另一个匹配。

2 个答案:

答案 0 :(得分:3)

core.match对正则表达式的支持位于一个单独的命名空间clojure.core.match.regex中。在功能编译之前,您需要 ,以使其按照您期望的方式工作。最简单,最简单且最不容易出错的方法是在您定义函数的命名空间的:require子句中添加适当的ns子句。

此外,模式匹配总是按顺序尝试子句。如果从不同于预期的子句获得返回值,则意味着该子句实际上与您的参数不匹配。

答案 1 :(得分:0)

据我所知,core.match不支持任何“特殊”方式的正则表达式作为匹配变量。也就是说,如果text实际上是一个正则表达式,那么你的第一个子句可能匹配,但如果它是一个字符串匹配一个正则表达式,它将会失败。