0

我仍在尝试了解 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)' 部分给出了错误。错误是针对“价值”的:

Type mismatch, expected: Double: actual: Any

我究竟做错了什么?

编辑:添加了缺少的参数

附言。

我觉得从选择查询的结果集中提取值以创建对象的模式匹配是严重的过度杀伤力。是否有另一种方法可以减轻痛苦?

4

1 回答 1

1

当我在转换器中将“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 中命名变量“类型”。

于 2013-07-11T21:55:14.317 回答