【发布时间】:2013-06-13 22:58:20
【问题描述】:
http://woss.name/2012/04/02/retrieving-bigdecimals-from-a-database-with-anorm-scala/
object Site {
val allFieldsParser = {
get[Pk[Long]]("sites.id") ~ // Help me parse this syntax
get[String]("sites.name") ~
get[BigDecimal]("sites.latitude") ~
get[BigDecimal]("sites.longitude") map {
case id ~ name ~ latitude ~ longitude =>
Site(id, name, latitude, longitude)
}
}
def findAll(): Seq[Site] = {
DB.withConnection { implicit connection =>
SQL("SELECT * FROM sites").as(Site.allFieldsParser *)
}
}
}
【问题讨论】:
-
此表示法源自解析器组合器。请参阅stackoverflow.com/questions/6818390/… 简而言之,您可以在脑海中将
~替换为&,因此这样的结构看起来像一个模式(你知道,就像正则表达式中的一个模式)。您正在使用特定部分(与 ~'s 组合成实体结构)定义高级表示,然后解析器要么成功,要么根据您的方案获得结构,或者失败。例如,要匹配代数表达式,可以写类似Number ~ Operation ~ Number ... -
@om-nom-nom 那么,你为什么在评论中回答?
-
@DanielC.Sobral 因为我不确定这个问题是关于技术实现(gzm0 已经解释过)还是关于语义的东西。
-
其实是tilda swinton的操作符。