作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
用于 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 {
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
outer.traced
)
关于logging - 如何在 'for' 理解中添加跟踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2322783/
我是一名优秀的程序员,十分优秀!