传递值沿管路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, _)))
如果你想缩短有点
。
很短又甜蜜的回答! –