gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:36:24 24 4
gpt4 key购买 nike

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com