gpt4 book ai didi

logging - 如何在 'for' 理解中添加跟踪?

转载 作者:行者123 更新时间:2023-12-02 11:56:59 26 4
gpt4 key购买 nike

用于 for 中的日志跟踪理解,我使用了这样的虚拟赋值:

val ll = List(List(1,2),List(1))            

for {
outer <- ll
a = Console.println(outer) // Dummy assignment makes it compile
inner <- outer
} yield inner
a =有点尴尬。有更干净的方法吗?

最佳答案

您可以随时定义自己的 trace功能:

def trace[T](x: T) = {
println(x) // or your favourite logging framework :)
x
}

那么 for comprehension 看起来像:
for { 
outer <- ll
inner <- trace(outer)
} yield inner

或者,如果您想打印更多信息,您可以定义 trace如下:
def trace[T](message: String, x: T) = {
println(message)
x
}

和理解看起来像:
for { 
outer <- ll
inner <- trace("Value: " + outer, outer)
} yield inner

编辑:回复你的评论,是的,你可以写 trace使其作用于目标的右侧!你只需要使用一些隐含的技巧。实际上,它看起来确实比应用于左侧时要好得多:)。

为此,您必须首先定义一个类,即 Traceable然后定义到该类的隐式转换:
class Traceable[A](x: A) { 
def traced = {
println(x)
x
}
}

implicit def any2Traceable[A](x: A) = new Traceable(x)

然后你唯一需要在你提供的代码中修改的是添加 traced到要跟踪的值的末尾。例如:
for { 
outer <- ll
inner <- outer traced
} yield inner

(这是由 Scala 编译器翻译成 outer.traced )

关于logging - 如何在 'for' 理解中添加跟踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2322783/

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