2012-12-14 2 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 "путаница", используя только Int.)

ответ

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

Спасибо! Действительно, это Projection мне нужно. Я слишком увлекся путаницей ошибки, считая, что это даже не Tuple, а просто использовать REPL. И спасибо, что поймал и мои другие несоответствия. – nix