作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望能够在这些行上做一些事情(不会编译):
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
}
我认为该语言目前不允许这样的结构,但是,有什么建议或变通方法可以达到类似的结果吗?
小更新:我已经 created a gist使用上述代码的略微扩展版本,并尝试模拟这种文字。目前为止,CheatEx 的版本是最好的。
最佳答案
在你的第二个例子中试试这个:
logScope(Logger()) { implicit logger =>
operationOne
}
它应该可以正常工作。这里的逻辑是“隐式”是 inside 闭包的特定值的属性,而不是闭包接口(interface)的一部分。
关于scala - 如何定义一个将函数文字(带有隐式参数)作为参数的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7069044/
我是一名优秀的程序员,十分优秀!