Tôi có một lớp Java có quyền truy cập vào ngữ cảnh giao dịch mà tôi muốn sử dụng từ Scala. Vì vậy, tôi nghĩ rằng tôi muốn viết một phương pháp Java có chức năng Scala và gọi nó trong giao dịch -Có chức năng lambda nào trong Scala không?
class Context {
@Transactional public void runInTx(Function0<scala.Unit> f) {
f.apply();
}
Cho đến nay rất tốt. Tôi muốn để có thể vượt qua một đóng Scala để nó
def deleteItems(ids: Set[Long]) = {
context.runInTx { ids foreach { dao.delete(_) } }
}
nhưng có thể không phải vì runInTx
không thực sự gọi bằng tên, và ids foreach { dao.delete(_) }
không phải là thực sự là một Function0
.
Bây giờ tôi có thể giải quyết vấn đề này với một thunk nhỏ
def deleteItems(ids: Set[Long]) = {
def localApply(f: => Unit) = context.applyInTx(f _)
localApply { ids foreach { dao.delete(_) } }
}
nhưng có vẻ như với tôi rằng tôi cần một hàm lambda để tạo ra một giấu tên Function0
ra khỏi một khối mã.
Điều đó có tồn tại trong API hay không hoặc làm thế nào để tôi viết nó?