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

私は何を間違っていますか?

編集:欠落しているパラメーターを追加

Ps。

選択クエリの結果セットから値を抽出してオブジェクトを作成するためのパターン マッチングは、やり過ぎだと感じています。これをより苦痛なく達成するための別の方法はありますか?

4

1 に答える 1

1

コンバーターで「一致」を「マップ」に置き換えると、コンパイルされます。

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」に名前を付けることはできません/すべきではありません。

于 2013-07-11T21:55:14.317 に答える