2013-07-15 2 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

regexes에 대한 core.match의 지원은 별도의 네임 스페이스 clojure.core.match.regex에 있습니다. 함수가 컴파일되기 전에 을 요구해야합니다.은 예상대로 작동합니다. 그것을 할 수있는, 간단한 쉽고 적어도 오류가 발생하기 쉬운 방법은 당신이 함수를 정의하는 네임 스페이스의 ns 절에 적절한 :require 절을 추가하는 것입니다. 또한

, 항상 일치하는 패턴이 순서대로 절을 시도합니다. 예상 한 것과 다른 절에서 리턴 값을 얻는다면 그 절은 실제로 인수와 일치하지 않는다는 것을 의미합니다.

+0

나는 이것을 core.match 0.2.0-rc3으로 테스트했다. 이번에는 Maven Central에서 최신 버전을 구할 수있다. –