Есть ли в Scala лямбда-функция?

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

7
задан Duncan McGregor 18 November 2011 в 18:10
поделиться