Como definir uma função que usa uma função literal (com um parâmetro implícito) como argument
Eu quero poder fazer algo nessas linhas (não será compilado):
def logScope(logger:Logger)(operation: (implicit l:Logger) => Unit) {/* code */ operation(logger) /* code */}
def operationOne(implicit logger:Logger) {/**/}
def operationTwo(implicit logger:Logger) {/**/}
E use-o da seguinte forma:
logScope(new ConsoleLogger){logger =>
operationOne
operationTwo
}
Mas o mais próximo que eu cheguei a uma solução de trabalho é este:
def logScope(logger:Logger)(operation: Logger => Unit) {/* code */ operation(logger) /* code */}
def operationOne(implicit logger:Logger) {/**/}
def operationTwo(implicit logger:Logger) {/**/}
/* other code */
logScope(new ConsoleLogger){logger =>
implicit val l = logger
operationOne
operationTwo
}
Acho que o idioma atualmente não permite essas construções, mas ainda assim algumas sugestões ou soluções alternativas para alcançar resultados semelhantes?
atualização menor: eu tenhocriou uma essência com uma versão ligeiramente expandida do código acima, com algumas tentativas de simular esse tipo de literal. A partir de agora, a versão do CheatEx é a melho