У меня есть класс 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
.
Теперь я могу решить эту проблему с помощью небольшого преобразователя
def deleteItems(ids: Set[Long]) = {
def localApply(f: => Unit) = context.applyInTx(f _)
localApply { ids foreach { dao.delete(_) } }
}
, но мне кажется, что мне нужна лямбда-функция для создания безымянной Function0
из блока кода.
Существует ли такая вещь в API, или как мне ее написать?