0

在我的 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"匹配时始终停止后续匹配并返回“空”。然而可能是因为这个子句更通用,它会尝试将其作为最后一个子句并匹配另一个子句。

4

2 回答 2

3

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

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

于 2013-07-15T02:45:17.113 回答
0

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

于 2013-07-15T02:15:33.963 回答