我希望能够在这些行上做一些事情(不会编译):
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 的版本是最好的。
在你的第二个例子中尝试这个:
logScope(Logger()) { implicit logger =>
operationOne
}
它应该工作正常。这里的逻辑是“隐式”是具有特定值的属性inside闭包,不是闭包接口的一部分。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)