0
私はScala Anormをプロジェクトに使用しています。私はケースクラスのパーサーを書くのが好きです。次に、これらのパーサーを他のクエリに再利用します。通常はJOIN
を追加します。Anorm RowParser [A]をRowParser [Option [A]]にするには
時々、オプションの値(の代わりにLEFT JOIN
)が必要になることがあります。同じパーサを再利用できるようにすることは非常に便利でしょう。どのようにこれを達成するのか?以下のパーサと
case class Specialty(
id: Long,
name: String
)
:
def parser(table: String): RowParser[Specialty] = {
get[Long]("id") ~ get[String](table + ".name") map {
case id ~ name => Specialty(id, name)
}
}
がどのように私はparser:RowParser[OptionSpecialty]]
にparser:RowParser[Specialty]
を回すことができる。例えば、私は次のような場合のクラスを持っていると言うよう
これは、テーブル専門がLEFT JOIN
によって追加されたクエリでそれを使用できるようにします。情報の余分な部分として
def parserOptional(table: String):RowParser[Option[Specialty]] = {
get[Option[Long]]("id") ~ get[Option[String]](table + ".name") map {
case oid ~ oname => oid.flatMap{id =>
oname.map{name =>
Specialty(id, name)
}
}
}
}
」を見つけたと思います動作していないようです "と正確には思われません(一方、'。? 'コンビネータはテストの対象です) – cchantep