2013-07-15 48 views
0

在我的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")) 

我想"empty"行的text變量總是停止隨後的匹配是否匹配,並返回「空」。不過,可能是因爲這個子句更通用,它會將它作爲最後一個而不是另一個匹配另一個。

回答

0

據我所知,core.match不支持正則表達式作爲任何「特殊」方式的匹配變量。也就是說,如果text實際上是一個正則表達式,那麼您的第一個子句可能匹配,但如果它是與匹配的正則表達式的字符串,則它將失敗。

+1

其實它確實存在,但是你需要'需要'適當的命名空間。剛剛發佈了一個答案,詳細信息。 –

3

core.match對正則表達式的支持生活在一個單獨的名稱空間中,clojure.core.match.regex。在您的函數編譯爲之前,您需要先對其進行編譯,才能按照您期望的方式工作。最簡單,最容易和最不容易出錯的方法是在定義函數的名稱空間的ns子句中添加一個適當的:require子句。

此外,模式匹配總是按順序嘗試子句。如果從不同的子句得到的返回值超出您的預期,這意味着該子句實際上未能與您的論點相匹配。

+0

我應該補充一點,我用core.match 0.2.0-rc3進行了測試,這是Maven Central目前提供的最新版本。 –