2011-07-17 16 views
5

私はparboiledを使ってパーサーに書き込みます。いくつかの方法を次のように定義しました:これらの3つの方法を1つに結合する方法

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) } 

あなたは非常に似ていることがわかります。私はそれらを1つにまとめたいが、それをどうやって行うのか分からない。多分それは次のようになります。

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

答えて

6

可変引数バージョンのように実装できます

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

しかし、私はので、私はそれをテストすることはできませんゆでを使用しないでください。

+0

ありがとうございます! – Freewind

関連する問題