这段代码:
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
是表记录元组的类型别名。
最佳答案
正在使用类型安全性较低(运行时)的 session 处理程序;如果您在 threadLocalSession 范围内,则以下内容应该有效:
import org.scalaquery.session.Database.threadLocalSession
def insAll(values: MyRdt*) {
Db.withTransaction { implicit ss: session =>
MyTable.insertAll(values: _*)
}
}
但是,就回答您的问题而言:编译时 session 处理程序,假设您已尝试指定传递到 block 中的类型是 session :
import org.scalaquery.session._
def insertAll(values: MyRdt*) {
Db.withTransaction { ss: Session =>
Foo.insertAll(values: _*)(ss)
}
}
关于scala - 为什么在 ScalaQuery 的 "Missing parameter type"子句中访问表时会出现 "withTransaction"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10202048/