如果您想要带行号的打印报表,您是如何做到的?
答案 0 :(得分:3)
查看Haoyi Li的sourcecode图书馆,我认为它可以为您提供所需内容。
sourcecode是一个小型Scala库,提供了常见的“源代码” 代码“运行时程序的上下文,类似于Python __name__,C ++的__LINE__或Ruby的__FILE__。例如,你可以 询问当前文件的文件名和行号 通过()语法或通过隐式。
参见例如https://github.com/lihaoyi/sourcecode#logging
您可以使用sourcecode.File和sourcecode.Line来定义日志 自动捕获其行号和文件名的函数
def log(foo: String)(implicit line: sourcecode.Line, file: sourcecode.File) = {
println(s"${file.value}:${line.value} $foo")
}
log("Foooooo") // sourcecode/shared/src/test/scala/sourcecode/Tests.scala:86 Fooooo
答案 1 :(得分:2)
这取决于你想做什么。
使用scala-trace-debug库,您可以输入以下内容:
Debug.trace(1 + 2)
得到这个:
"3" in thread main:
path.to.file(file.Scala: 22) // click-able stack trace
您可以自定义堆栈跟踪的行数,如下所示:
Debug.trace(1 + 2, 3) // 3 lines of stack trace
如果你做info.collaboration_station.debug._
,你甚至可以这样做:
val three = 3.trace
...
"3" in thread main:
path.to.file(file.Scala: 22)
最后,支持表达式:
Debug.traceExpression{
val myVal = 4
1 + 2 + myVal
}
...
"{
val myVal = 4;
(3).+(myVal)
} -> 7" in thread main:
at main.Main$.main(Main.scala:12)
与其他库不同,这更适合调试。如果我想提供正在发生的事情的历史记录并且我不希望用户看到堆栈跟踪,我将不会使用此工具。