2

这是我正在尝试做的事情:

def parser = parser_a >> {
  case a => val c = compute(a) ; parser_b(c)
} ^^ {
  case a ~ b => (a, b)
}

当然它不会起作用,因为在^^运算符之后的函数只能得到parser_b. 我怎样才能保持结果parser_a

4

1 回答 1

6

您可以使用解析器是一元的事实来编写如下:

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 更清晰一些。

于 2013-09-16T12:38:39.503 回答