可能重复:
理解 Scala 解析器组合器中的波浪号
我在这个 play2教程中看到了以下内容:
val task = {
get[Long]("id") ~
get[String]("label") map {
case id~label => Task(id, label)
}
}
是什么~
意思?(在 Google 中搜索~
没有返回任何内容)。为什么它似乎首先在一行的末尾,然后似乎连接了两个属性?
可能重复:
理解 Scala 解析器组合器中的波浪号
我在这个 play2教程中看到了以下内容:
val task = {
get[Long]("id") ~
get[String]("label") map {
case id~label => Task(id, label)
}
}
是什么~
意思?(在 Google 中搜索~
没有返回任何内容)。为什么它似乎首先在一行的末尾,然后似乎连接了两个属性?
Scala 语法允许方法名称使用特殊字符,例如+
,*
和:
,并将它们用作中缀运算符,这有效地允许运算符重载以及创建新运算符。这可以使代码更简洁,但也很难弄清楚特定 Scala 运算符的作用,因为您无法有效地在 Google 上搜索\:
or++
或~
or::
或几乎任何 Scala 运算符方法名称。更困难的是,可能会对操作数之一应用隐式转换,因此提供操作符方法的类可能与源代码中操作数的声明类不同。
更新:使用Scalex
Scalex,可以进行所有那些 ascii 和 unicode 字符搜索(在 Horstmann 的“不耐烦”一书中也进行了很好的讨论
这是一个组合解析器
这是我在大学的编译器课程中完成的一项作业,它简化了代数表达式
( x + 0 ) - ( 1 * --x )
x + - ( 1 * --x )
x + - ( --x )
x + - ( x )
0
建一个sql表是类似的
第一部分
get[Long]("id") ~
get[String]("label")
解析两行
地图案例为您提供解析结果
我记得这是我开始学习 scala/play 时看到的第一件事。我建议你好好休息一下,阅读整本书(scala 2nd edition 编程),然后上这个在线课程
您还应该考虑电梯