传递值沿管路Scala的解析器组合

问题描述:

我有以下规则(许多其他obmitted为清楚起见):传递值沿管路Scala的解析器组合

def bindRg: Parser[Cmd] = "bind-roaming-group" ~> name ~ bindRgBody(????) <~ 
    exit ^^ { case name~body => new BindRoamingGroupCmd(name, body)} 

def bindRgBody(name: String) = // ... 

def name: Parser[String] = """\S+""".r 

我想通过“名”的字符串值到bindRgBody(???? ),但不知道为什么'????'

你可以在解析器"bind-roaming-group" ~> name使用flatMap

def bindRg: Parser[Cmd] = ("bind-roaming-group" ~> name) flatMap (n => bindRgBody(n) <~ exit ^^ (b => new BindRoamingGroupCmd(n, b))) 

def bindRg: Parser[Cmd] = ("bind-roaming-group" ~> name) >> (n => bindRgBody(n) <~ exit ^^ (new BindRoamingGroupCmd(n, _))) 
如果你想缩短有点

+0

很短又甜蜜的回答! –