scala – 如何将这三种方法合二为一

我正在使用 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 { ??? }

解决方法

vararg版本可以实现为:

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

但是,我不使用parboiled所以我无法测试它.

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...