这是我想做的事情:
def parser = parser_a >> {
case a => val c = compute(a) ; parser_b(c)
} ^^ {
case a ~ b => (a, b)
}
当然,这是行不通的,因为
^^
运算符之后的函数仅获得parser_b
的结果。如何保留parser_a
的结果? 最佳答案
您可以使用解析器是单原子的事实来编写此代码,如下所示:
val parser = for {
a <- parser_a
b <- parser_b(compute(a))
} yield (a, b)
或者,您可以在解决方案中更改以下行(请注意,此处的
success
只是一般monadic return
的不太具体的版本)。 case a => val c = compute(a) ; success(a) ~ parser_b(c)
不过,在这种情况下,我个人发现
for
-comprehension更加清晰。关于parsing - Scala解析器组合器:与 “into”结合使用时如何返回中间解析器的内容?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18827731/