我想写一个通用的辅助方法:
def using(closeable: [B has close() method], callback: [B has close() method] => A): A {
try {
callback(closeable)
} finally {
closeable.close()
}
}
Run Code Online (Sandbox Code Playgroud)
意图是我可以使用具有close()方法的任何东西:
using(new FileInputStream(...)) {
stream => stream.read()
}
using(dataSource.getConnection) {
conn => using(conn.createStatement()) {
statement => using(statement.executeQuery("...")) {
rs => rs.getString(1)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找的是如何命名,以便我可以自己搜索语法,以及语法本身.
全力以赴
type Closeable = {def close() }
def using[A,B](a: A with Closeable)(f: A => B) =
try { f(a) } finally { a.close() }
Run Code Online (Sandbox Code Playgroud)
(你也可以写A {def close()} 而不是A with Closeable)
一个测试:
case class X(i: Int) { def close() = println("closed") }
using(X(3)){x => println("i is " + x.i) }
Run Code Online (Sandbox Code Playgroud)
输出:
我是3岁
关闭
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |