在scala中做什么?

时间:2012-12-15 16:03:07

标签: scala playframework

  

可能重复:
  Understanding the tilde in Scala’s parser combinators

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

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

~是什么意思? (在Google中搜索~并未返回任何内容)。 为什么它似乎首先在一行结束然后它似乎连接两个属性?

3 个答案:

答案 0 :(得分:8)

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

更新:使用Scalex

答案 1 :(得分: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

答案 2 :(得分:1)

这是combinatory parser

Live example

这是我在大学的编译课程中的一个分配,它简化了代数表达

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

构建一个类似的SQL表

第一部分

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

解析两行

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

查看thatthat

我记得这是我开始学习scala / play时看到的第一件事。我建议你好好休息一下并阅读整本书(programming in scala 2nd edition)并执行此操作online class

您还应该考虑升降机