我仍在努力掌握scala、Play和anorm的某些方面的诀窍。现在,我已经阅读了所有的手册和在线文档,但是我似乎能找到一个令人满意的解决方案来解决我的问题。
我有以下代码用于撤回一个名为MyThing的对象:
case class MyThing(val code: String, val type:String, val value: Double, var id:Long)
object MyThing{
val myThingConverter = {
get[String]("type") ~ get[String]("code")~get[Double]("value") ~ get[Long]("id") match {
case type ~ code ~ value ~ id =>
MyThing( "test", " test", value , 213 )
}
}
val loadQuery =
"""
"select * from THINGS where id = {id}"
"""
def loadThings(id: Long): Option[Thing] = {
DB.withConnection {
implicit c =>
SQL(loadQuery)
.on('id -> id).as(myThingConvert *)
}.headOption
}问题是在‘MyThing’( "test",“test",value,213 )处出现了一个错误。错误为"value“:
Type mismatch, expected: Double: actual: Any我做错了什么?
编辑:添加了缺失的parm
Ps。
我觉得从要创建对象的select查询的结果集中提取值的模式匹配是严重过度的。还有别的方法可以减轻痛苦吗?
发布于 2013-07-11 21:55:14
当我在您的转换器中将"match“替换为"map”时,它会为我编译:
val myThingConverter = {
get[String]("type") ~ get[String]("code") ~ getDouble]("value") ~ get[Long]("id") map {
case tpe ~ code ~ value ~ id =>
MyThing( "test", " test", value , 213 )
}
}此外,您不能/不应该在Scala中命名变量"type“。
https://stackoverflow.com/questions/17553820
复制相似问题