2

このコード:

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: _*)

不思議なことに、次のように 2 つの関数に分割すると、

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

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

エラーなしでコンパイルされます。

PS:MyRdtテーブル レコード タプルの型エイリアスです。

4

2 に答える 2

1

タイプセーフ性が低い (ランタイム) セッション ハンドラーが進行中です。スコープに threadLocalSession がある場合は、次のように動作するはずです。

import org.scalaquery.session.Database.threadLocalSession

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

ただし、re: コンパイル時のセッション ハンドラーに関する質問に答える限り、ブロックに渡される型が Session であることを指定しようとしたと仮定します。

import org.scalaquery.session._

def insertAll(values: MyRdt*) {
  Db.withTransaction { ss: Session =>
    Foo.insertAll(values: _*)(ss)
  }
}
于 2012-04-18T08:02:48.763 に答える
1

過負荷が原因です。メソッドに似た署名withTransaction:

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
于 2012-04-18T11:17:41.740 に答える