2013-04-12 74 views
1

我有一個包裝調用ANORM的SQL功能在未來的一個功能:隱含參數不傳遞給高階函數

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

在模型中使用它:

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

收益率:

「無法找到連接參數內含價值:java.sql.Connection中的」

任何方式將隱式連接參數(con)拉回到範圍內?

回答

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))