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

감사합니다! 실제로 그것이 필요한 투영입니다. 오류의 혼란에 너무 빠져있어 튜플이 아니고 REPL 만 사용했다는 것을 고려해야합니다. 그리고 다른 불일치를 잡아 주셔서 감사합니다. – nix

관련 문제