此代码中语法糖的含义和目的是什么?
def exp: Parser[Expr] = operands ~ binOp ~ exp ^^ {case e1~o~e2=>BinaryOp(o,e1,e2)}
特别是,这些表达方式的含义是什么?
operands ~ binOp ~ exp ^^
e1~o~e2
答案 0 :(得分:3)
operands~binOp~exp ^^ ...
scala中的运算符只是普通的方法调用:
operands ~ binOp ~ exp ^^ ...
与
相同operands.~(binOp).~(exp).^^(...)
您可以查看~
和^^
方法here的文档,或者您应该可以在IDE中单击它们。
案例e1~o~e2
这匹配一个名为~
的案例类 - 许多双参数事物可以用这个"中缀表示法"在斯卡拉。它相当于:
case ~(e1, ~(o, e2))
(请参阅case classes上的文档)
答案 1 :(得分:1)
那些没有任何特殊含义 - 它们只是被称为~
和^^
的方法。您需要查看您正在使用的任何库的文档/实现,以定义它们的用途。