Funções de cadeia de maneira diferente
As funções Scala possuem os seguintes métodos para encadeamento:
fn1.andThen(fn2)
fn1.compose(fn2)
Mas como pode ser escrito neste caso:
Eu tenho funçãocleanUp()
que deve ser chamado sempre como último passo. E eu tenho várias outras funções, assim:
class Helper {
private[this] val umsHelper = new UmsHelper()
private[this] val user = umsHelper.createUser()
def cleanUp = ... // delete user/ and other entities
def prepareModel(model: TestModel) = {
// create model on behalf of the user
}
def commitModel() = {
// commit model on behalf of the user
}
}
E algum código externo pode usar código como este:
val help = new Helper()
help.prepareModel()
help.commitModel()
// last step should be called implicitly cleanUp
Como isso pode ser escrito de uma maneira funcional, esse encadeamento sempre chamarácleanUp
implicitamente como último passo?
Nota: Eu vejo isso como análogo do destruidor em C ++. Algum encadeamento (não importa como essa cadeia é feita)fn1 andLater fn2 andLater fn3
tem que chamar como último passocleanUp
(fn1 andLater fn2 andLater fn3 andLater cleanUp
) Errado com a escrita diretacleanUp
método é que há uma grande mudança que alguém vai perder esta etapa edo utilizador vazará (permanecer no banco de dados)