Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
这是我正在尝试做的事情:
def parser = parser_a >> { case a => val c = compute(a) ; parser_b(c) } ^^ { case a ~ b => (a, b) }
当然它不会起作用,因为在^^运算符之后的函数只能得到parser_b. 我怎样才能保持结果parser_a?
^^
parser_b
parser_a
您可以使用解析器是一元的事实来编写如下:
val parser = for { a <- parser_a b <- parser_b(compute(a)) } yield (a, b)
或者,您可以在解决方案中更改以下行(请注意,success这里只是一般 monadic 的一个不太具体的版本return)。
success
return
case a => val c = compute(a) ; success(a) ~ parser_b(c)
不过,在这种情况下,我个人发现for-comprehension 更清晰一些。
for