2015-06-19 41 views
0

我有以下規則(許多其他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(???? ),但不知道爲什麼'????'

回答

3

你可以在解析器"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

很短又甜蜜的回答! –