У меня есть класс 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 или как мне ее написать?