Scala 阿诺姆和得到[双倍]
我仍在努力掌握scala、Play和anorm的某些方面。现在,我阅读了所有的手册和在线文档,但我似乎能找到一个令人满意的解决方案 我有以下代码用于检索名为MyThing的对象:Scala 阿诺姆和得到[双倍],scala,playframework-2.0,pattern-matching,anorm,Scala,Playframework 2.0,Pattern Matching,Anorm,我仍在努力掌握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
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
}
问题在于“虚构(“测试”、“测试”、值213)”部分出现错误。错误是针对“值”:
我做错了什么
编辑:添加缺少的参数
附言
我觉得,从select查询的结果集中提取值以创建对象的模式匹配是非常过分的。anorm中是否有其他方法可以轻松完成此任务?当我将转换器中的“匹配”替换为“映射”时,它会为我编译:
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”。您对case类(神话)的定义是否缺少type参数?您提供的定义只有三个参数,您使用它的时候就好像使用了四个参数一样。很抱歉,复制/粘贴错误。修好了。谢谢
val myThingConverter = {
get[String]("type") ~ get[String]("code") ~ getDouble]("value") ~ get[Long]("id") map {
case tpe ~ code ~ value ~ id =>
MyThing( "test", " test", value , 213 )
}
}