这是一种“类型不匹配”?

时间:2012-12-14 19:56:52

标签: scala scalaquery

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])

最终目标是我希望所有选定的列都转换为具有命名访问器的Object,而不是元组。

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

更新:

这是问题的Gist(从上面的代码略微简化,并通过仅使用Int来消除任何String / java.lang.String“混淆”。)

1 个答案:

答案 0 :(得分:3)

错误消息并没有用来告诉你哪个是TupleN,尽管我认为这在某些方面有所改进。不匹配是在元组和n args之间。或者不是。

fix在2.9.2中。我注意到你的.sbt使用2.9.1 scalaquery,以防万一。 scala-tools.org是不是已经过时了?对不起半帮。

作为非用户,看起来Projection2不是您寻求的元组,尽管是产品:

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

REPLing:

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