这是我想要做的:
def parser = parser_a >> {
case a => val c = compute(a) ; parser_b(c)
} ^^ {
case a ~ b => (a, b)
}
Run Code Online (Sandbox Code Playgroud)
当然它不起作用,因为^^运算符后的函数只得到结果parser_b.我怎样才能保持结果parser_a?
您可以使用解析器是monadic的事实来编写它,如下所示:
val parser = for {
a <- parser_a
b <- parser_b(compute(a))
} yield (a, b)
Run Code Online (Sandbox Code Playgroud)
或者,您可以在解决方案中更改以下行(请注意,success这只是一般monadic的一个不太具体的版本return).
case a => val c = compute(a) ; success(a) ~ parser_b(c)
Run Code Online (Sandbox Code Playgroud)
不过,我个人觉得这种for理解在这种情况下更加清晰.
| 归档时间: |
|
| 查看次数: |
344 次 |
| 最近记录: |