3

可能重复:
理解 Scala 解析器组合器中的波浪号

我在这个 play2教程中看到了以下内容:

  val task = {
    get[Long]("id") ~
    get[String]("label") map {
      case id~label => Task(id, label)
    }
  }

是什么~意思?(在 Google 中搜索~没有返回任何内容)。为什么它似乎首先在一行的末尾,然后似乎连接了两个属性?

4

3 回答 3

8

Scala 语法允许方法名称使用特殊字符,例如+,*:,并将它们用作中缀运算符,这有效地允许运算符重载以及创建新运算符。这可以使代码更简洁,但也很难弄清楚特定 Scala 运算符的作用,因为您无法有效地在 Google 上搜索\:or++~or::或几乎任何 Scala 运算符方法名称。更困难的是,可能会对操作数之一应用隐式转换,因此提供操作符方法的类可能与源代码中操作数的声明类不同。

更新:使用Scalex

于 2012-12-15T16:05:15.710 回答
5

Scalex,可以进行所有那些 ascii 和 unicode 字符搜索(在 Horstmann 的“不耐烦”一书中也进行了很好的讨论

http://scalex.org/?q=~

http://scalex.org/?q=%E2%8A%9B

http://www.artima.com/pins1ed/book-index.html#indexanchor

于 2012-12-15T19:20:42.577 回答
1

这是一个组合解析器

活生生的例子

这是我在大学的编译器课程中完成的一项作业,它简化了代数表达式

( x + 0 ) - ( 1 * --x )
x + - ( 1 * --x )
x + - ( --x )
x + - ( x )
0

建一个sql表是类似的

第一部分

get[Long]("id") ~
get[String]("label")

解析两行

地图案例为您提供解析结果

看看那个那个

我记得这是我开始学习 scala/play 时看到的第一件事。我建议你好好休息一下,阅读整本书(scala 2nd edition 编程),然后上这个在线课程

您还应该考虑电梯

于 2012-12-15T17:03:15.983 回答