2012-04-18 4 views
2

이 코드 : ScalaQuery에서 "withTransaction"절의 테이블에 액세스 할 때 "누락 매개 변수 유형"이 나타나는 이유는 무엇입니까?

def insAll(values: MyRdt*) { 
    Db.withTransaction(session => { // Db is an org.scalaquery.session.Database instance 
    MyTable.insertAll(values: _*)(session) 
    }) 
} 

가 컴파일되지 않습니다. 오류는

... missing parameter type 
[error]  Db.withTransaction(session => { 
          ^

어떤 아이디어입니까? 내가 MyTable.insertAll(values: _*) 대신 미리 정의 된 쿼리에 액세스하는 경우

이 확인 컴파일합니다. 내가

def insAllS(values: MyRdt*)(session: Session) { 
    MyTable.insertAll(values: _*)(session) 
} 

def insAll(values: MyRdt*) { 
    Db.withTransaction(session => { 
    insAllS(values: _*)(session) 
    }) 
} 

처럼이 함수로 그것을 분할하는 경우

호기심, 그것은 오류없이 컴파일합니다.

PS : MyRdt 테이블 레코드 튜플 타입 별칭이다.

답변

1

길에서 타입 안전하지 않은 (런타임) 세션 처리기가 있습니다. 지금까지 귀하의 질문에 다시 응답으로, 그러나

import org.scalaquery.session.Database.threadLocalSession 

def insAll(values: MyRdt*) { 
    Db.withTransaction { implicit ss: session => 
    MyTable.insertAll(values: _*) 
    } 
} 

을 : 당신이 범위 threadLocalSession에있는 경우, 다음 일을해야 시간 세션 핸들러를 컴파일, 당신은 블록으로 전달 된 형식이 세션 것을 지정 시도했다고 가정합니다 :

import org.scalaquery.session._ 

def insertAll(values: MyRdt*) { 
    Db.withTransaction { ss: Session => 
    Foo.insertAll(values: _*)(ss) 
    } 
} 
1

과부하는 책임이 있습니다.

scala> def om[T](f: Int => T): T = f(0) 
om: [T](f: (Int) => T)T 

scala> def om[T](f: => T): T = f 
om: [T](f: => T)T 

scala> om(x => 'x) 
<console>:80: error: missing parameter type 
    om(x => 'x) 
^

scala> def m[T](f: Int => T): T = f(0) 
m: [T](f: (Int) => T)T 

scala> m(x => 'x) 
res46: Symbol = 'x 
: withTransaction 방법과 유사 서명