我正在尝试将以下代码从一个类中提取到一个特征中以供重用:
import org.slf4j.{LoggerFactory, Logger}
import slick.driver.H2Driver.api._
import scala.concurrent.Await
import scala.concurrent.duration.Duration
object UserProfileFixtures {
val logger: Logger = LoggerFactory.getLogger(UserProfileFixtures.getClass)
val table = UserProfileQueries.query
// todo: Create a trait for all this
def createSchema(db: Database) = {
logger.info("Creating schema for the UserProfiles table")
Await.result(db.run((table.schema).create), Duration.Inf)
logger.info("UserProfiles table schema created")
}
}
问题是它table
被隐式转换为添加schema
属性的东西。如果我只是提升并转移上述内容,table
则不会发生隐式转换,并且编译器找不到该schema
属性。
我怎样才能找出我应该table
在以下特征中给出什么类型?
import org.slf4j.Logger
import slick.driver.H2Driver.api._
import scala.concurrent.Await
import scala.concurrent.duration.Duration
trait FixtureHelper {
val logger: Logger
val data: Seq
val table: TableQuery[_] // this type is wrong...
def createSchema(db: Database) = {
logger.info("Creating schema")
// compiler can't resolve `schema` in the line below
Await.result(db.run(table.schema.create), Duration.Inf)
logger.info("Schema created")
}
}
我正在使用 slick 3.0 BTW,但这应该会有所作为。我想知道在隐式转换后如何找出值的类型。