【发布时间】:2012-01-01 11:04:09
【问题描述】:
我有一个 Java 类,它可以访问我想从 Scala 使用的事务上下文。所以我想我会写一个 Java 方法,它接受一个 Scala 函数并在事务中调用它 -
class Context {
@Transactional public void runInTx(Function0<scala.Unit> f) {
f.apply();
}
到目前为止一切顺利。我希望能够将 Scala 闭包传递给它
def deleteItems(ids: Set[Long]) = {
context.runInTx { ids foreach { dao.delete(_) } }
}
但不能,因为runInTx 实际上不是按名称调用的,而ids foreach { dao.delete(_) } 实际上不是Function0。
现在我可以用一个小小的 thunk 来解决这个问题
def deleteItems(ids: Set[Long]) = {
def localApply(f: => Unit) = context.applyInTx(f _)
localApply { ids foreach { dao.delete(_) } }
}
但在我看来,我需要一个 lambda 函数来从代码块中生成一个未命名的Function0。
API 中是否存在这样的东西,或者我将如何编写它?
【问题讨论】:
标签: function scala lambda closures