2012-12-14 85 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