这段代码中语法糖的含义和目的是什么?Scala中的一些语法含义是什么?
def exp: Parser[Expr] = operands ~ binOp ~ exp ^^ {case e1~o~e2=>BinaryOp(o,e1,e2)}
特别地,这些表达式中的每一个意味着什么?
operands ~ binOp ~ exp ^^
e1~o~e2
这段代码中语法糖的含义和目的是什么?Scala中的一些语法含义是什么?
def exp: Parser[Expr] = operands ~ binOp ~ exp ^^ {case e1~o~e2=>BinaryOp(o,e1,e2)}
特别地,这些表达式中的每一个意味着什么?
operands ~ binOp ~ exp ^^
e1~o~e2
那些没有任何特殊的含义 - 他们只是被称为~
和^^
方法。您需要查看您正在使用的库的文档/实现,以定义它们来确定它们的功能。
操作数〜binOp〜EXP ^^ ...
运营商Scala的只是普通的方法调用:
operands ~ binOp ~ exp ^^ ...
相同
operands.~(binOp).~(exp).^^(...)
你可以查看~
和^^
方法的文档here,或者您应该能够在您的IDE中点击进入它们。
情况下,E1〜O〜E2
这被称为匹配一个~
类情况 - 大量的双参数东西可以写在斯卡拉这个“缀符号”。这相当于:
case ~(e1, ~(o, e2))
(见case classes的文档)
感谢您的回答@Imm – Michale
你是不是应该开始一个初学者教程,而不是一个解析器组合,当你刚开始学习Scala呢? – sschaef
阅读http://www.artima.com/pins1ed/combinator-parsing.html,但请注意它是第31章 –