2012-12-14 46 views
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). 

UPDATE:

这里的问题的一个Gist(从上面的代码略微简化,并且通过仅使用诠释消除了任何字符串/ java.lang.String中 “混淆”。)

回答

3

的错误消息没有用来告诉你哪个是TupleN,尽管我认为这在某些时候得到了改进。不匹配在一个元组和n个参数之间。或不。

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 
+0

谢谢!事实上,这是我需要的投影。我陷入了错误的混乱之中,认为它甚至不是一个Tuple,而只是使用REPL。感谢您也抓住了我的其他不一致之处。 – nix