Я хочу иметь возможность что-то делать в этих строках (не компилируется):
def logScope(logger:Logger)(operation: (implicit l:Logger) => Unit) {/* code */ operation(logger) /* code */}
def operationOne(implicit logger:Logger) {/**/}
def operationTwo(implicit logger:Logger) {/**/}
А затем используйте его так:
logScope(new ConsoleLogger){logger =>
operationOne
operationTwo
}
Но самое близкое, что я нашел к рабочему решению, это:
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
}
Я не думаю, что в настоящее время язык допускает такие конструкции, но все же, какие-либо предложения или обходные пути для достижения аналогичных результатов?
незначительное обновление: я создал гист с немного расширенной версией приведенного выше кода с парой попыток имитировать этот тип литерала. На данный момент версия CheatEx является лучшей.