4
found   : (Int, String, Option[java.lang.String])
required: (Int, String, Option[java.lang.String])

関連コード:

object M extends Table[(Int, String, Option[String])]("table") {

  def msaid = column[Int]("msaid", O NotNull)
  def name = column[String]("name", O DBType "varchar(255)")
  def shape = column[Option[String]]("shape")
  def * = msaid ~ name ~ shape

  type T = (Int, String, Option[java.lang.String])

  def apply(msa: T) = 1

  def q() = db withSession { s: Session => (for (r <- M) yield M(*)).list()(s) }
                                                                 ^
                                                                 ^
...

私も試しました

  type T = (Int, String, Option[String])

最終的な目標は、選択したすべての列を、タプルではなく、名前付きアクセサーを持つオブジェクトに変換することです。

Scala version 2.9.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_07).

アップデート:

問題の要点は次のとおりです(上記のコードから少し簡略化され、Intのみを使用することでString / java.lang.Stringの「混乱」を排除します)。

4

1 に答える 1

3

エラーメッセージは、TupleNがどれであるかを示すために使用されませんでしたが、ある時点で改善されたと思います。不一致はタプルとn引数の間にあります。か否か。

修正は2.9.2にあります。重要な場合に備えて、.sbtが2.9.1scalaqueryを使用していることに気付きました。そして、scala-tools.orgは時代遅れではありませんか?半分助けてすみません。

非ユーザーとして言えば、Projection2は、製品ではありますが、探しているタプルではないように見えます。

class Projection2 [T1, T2] extends (Column[T1], Column[T2]) with Projection[(T1, T2)] 

交換:

scala> M.column[Int]("id") ~ M.column[Int]("n")
res1: (Int, Int) = Projection2

scala> M(res1)
<console>:23: error: type mismatch;
 found   : (Int, Int)
 required: (Int, Int)
              M(res1)
                ^

scala> M.apply
                                def apply(v: (Int, Int)): Int   

scala> M.apply((1,2))
res3: Int = 1
于 2012-12-14T20:53:58.333 に答える