隐式参数未传递给高阶函数

时间:2013-04-12 09:11:36

标签: scala playframework-2.0 implicit

我有一个函数在未来包装对Anorm的SQL函数的调用:

def sqlWithFuture[T](sql: => T) = Future(DB.withConnection(con => sql))

在模型中使用它:

def userQuery = sqlWithFuture(SQL("select init()").as(...))

的产率:

“找不到参数连接的隐式值:java.sql.Connection”

是否可以将隐式连接参数(con)拉回到范围内?

1 个答案:

答案 0 :(得分:1)

我假设您正在使用Play 2.0。

让我们看看DB http://www.playframework.com/documentation/api/2.0/scala/play/api/db/DB $。html

def
withConnection [A] (block: (Connection) ⇒ A)(implicit app: Application): A

执行一段代码,提供JDBC连接。连接和所有已创建的语句将自动释放。

SQL对象允许您创建anorm.SqlQuery:http://www.playframework.com/documentation/api/2.0/scala/index.html#anorm.SqlQuery

def as [T] (parser: ResultSetParser[T])(implicit connection: Connection): T

所以问题在于你的签名:

def sqlWithFuture[T](sql: => T) = Future(DB.withConnection(con => sql))

没有说连接应该传递给sql块。

def sqlWithFuture[T](sql: Connection => T) = Future(DB.withConnection(con => sql(con))