如何定义一个函数,它将函数文字(带有隐式参数)作为参数?

Las*_*ian 3 parameters scala implicit function-literal

我希望能够在这些行上做一些事情(不会编译):

def logScope(logger:Logger)(operation: (implicit l:Logger) => Unit) {/* code */ operation(logger) /* code */} 
def operationOne(implicit logger:Logger) {/**/}
def operationTwo(implicit logger:Logger) {/**/}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它:

logScope(new ConsoleLogger){logger =>
    operationOne
    operationTwo
    }
Run Code Online (Sandbox Code Playgroud)

但最接近我的工作解决方案是:

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
    }
Run Code Online (Sandbox Code Playgroud)

我不认为语言目前允许这样的结构,但仍然有任何建议或变通方法可以达到类似的结果吗?


次要更新:我已经创建了一个带有上述代码的略微扩展版本的要点,并尝试模拟这种文字.截至目前,CheatEx的版本是最好的.

Che*_*tEx 6

在你的第二个例子中试试这个:

logScope(Logger()) { implicit logger =>
  operationOne
}
Run Code Online (Sandbox Code Playgroud)

它应该工作正常.这里的逻辑是'implicit'是闭包特定值的属性,而不是闭包接口的一部分.