2011-07-17 82 views
5

我正在使用parboiled編寫解析器。我將一些方法定義爲:如何將這三種方法合併爲一個

def InlineCharsBefore(sep: String) 
    = rule { zeroOrMore(!str(sep) ~ InlineChar) } 
def InlineCharsBefore(sep1: String, sep2: String) 
    = rule { zeroOrMore((!str(sep1) | !str(sep2)) ~ InlineChar) } 
def InlineCharsBefore(sep1: String, sep2: String, sep3: String) 
    = rule { zeroOrMore((!str(sep1) | !str(sep2) | !str(sep3)) ~ InlineChar) } 

您可以看到它們非常相似。我想把它們合併成一個,但我不知道該怎麼做。也許這應該是:

def InlineCharsBefore(seps: String*) = rule { ??? } 

回答

6

可變參數版本可以作爲實現:

def InlineCharsBefore(seps: String*) = { 
    val sepMatch = seps.map(s => ! str(s)).reduceLeft(_ | _) 
    rule { zeroOrMore(sepMatch ~ InlineChar) } 
} 

不過,我不使用蒸穀米所以我不能測試它。

+0

這是正確的,謝謝! – Freewind

相關問題