加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 18:17:54 所属栏目:安全 来源:网络整理
导读:我正在使用 parboiled来编写解析器.我将一些方法定义为: def InlineCharsBefore(sep: String) = rule { zeroOrMore(!str(sep) ~ InlineChar) }def InlineCharsBefore(sep1: String,sep2: String) = rule { zeroOrMore((!str(sep1) | !str(sep2)) ~ InlineCh
我正在使用 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所以我无法测试它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读