12

Play フレームワーク 2.0 では、次のような行パーサーを使用して PostgreSQL から実数 (つまり、単精度浮動小数点数) 型の列をロードしようとしています。

case class Foo(bar: Float)

object Foo {
    def all = DB.withConnection { implicit c =>
        SQL("SELECT * FROM foo").as(fooParser *)
    }

    val fooParser = {
        get[Float]("bar") map {     
          case bar => Foo(bar)
        }
    }
}

これにより、エラーが発生します。could not find implicit value for parameter extractor: anorm.Column[Float]

倍精度型を使用すると、すべて正常に動作します。Anormで単精度浮動小数点数を使用することは何とか可能ですか?

4

1 に答える 1

13

既存のものに基づいて、いつでも独自の列パーサーベースを作成できます。

 implicit def rowToFloat: Column[Float] = Column.nonNull { (value, meta) =>
  val MetaDataItem(qualified, nullable, clazz) = meta
  value match {
    case d: Float => Right(d)
    case _ => Left(TypeDoesNotMatch("Cannot convert " + value + ":" + value.asInstanceOf[AnyRef].getClass + " to Float for column " + qualified))
  }
}

ただし、JDBCドライバーによって返される値のタイプと一致するため、正しくない可能性があります(列の定義によって異なります)。

于 2012-06-25T07:02:53.020 に答える