2015-07-21 52 views
0

这段代码中语法糖的含义和目的是什么?Scala中的一些语法含义是什么?

def exp: Parser[Expr] = operands ~ binOp ~ exp ^^ {case e1~o~e2=>BinaryOp(o,e1,e2)} 

特别地,这些表达式中的每一个意味着什么?

  • operands ~ binOp ~ exp ^^
  • e1~o~e2
+3

你是不是应该开始一个初学者教程,而不是一个解析器组合,当你刚开始学习Scala呢? – sschaef

+0

阅读http://www.artima.com/pins1ed/combinator-parsing.html,但请注意它是第31章 –

回答

1

那些没有任何特殊的含义 - 他们只是被称为~^^方法。您需要查看您正在使用的库的文档/实现,以定义它们来确定它们的功能。

3

操作数〜binOp〜EXP ^^ ...

运营商Scala的只是普通的方法调用:

operands ~ binOp ~ exp ^^ ... 

相同

operands.~(binOp).~(exp).^^(...) 

你可以查看~^^方法的文档here,或者您应该能够在您的IDE中点击进入它们。

情况下,E1〜O〜E2

这被称为匹配一个~类情况 - 大量的双参数东西可以写在斯卡拉这个“缀符号”。这相当于:

case ~(e1, ~(o, e2)) 

(见case classes的文档)

+0

感谢您的回答@Imm – Michale

相关问题