Scala 中泛型定义中一元符号总可以进行如下的转换:
~[A, B]可以写为A ~ B
因此我们可以写出下面的代码
scala> case class ~[+A, +B](_1: A, _2: B)defined class $tilde
scala> val a = new ~( new ~(1,2),3)
a: ~[~[Int,Int],Int] = ~(~(1,2),3)
scala> val aa = a match {case a1 ~ a2 ~ a3 => (a1, a2, a3)}
aa: (Int, Int, Int) = (1,2,3)
在play framework 2中
使用
anorm时,我们可以写出下面的代码:
val task = {
get[Int](
"id"
) ~
get[String](
"label"
) ~
get[String](
"content"
) map {
case
id ~
label ~
content =>
Task(id, label, content)
}
}
这里map之前的
combinator parser解析之后所返回的内容是各个字段的值所组成的case类~的实例,结构类似~(~(id,label),content),它的泛型结构可以匹配为id ~ label ~ content。