Si vous voulez des instructions d'impression avec des numéros de ligne, comment le faites-vous?Comment pouvons-nous tracer des expressions/instructions d'impression avec des numéros de ligne dans Scala?
Répondre
Cela dépend de ce que vous voulez faire.
Avec la bibliothèque scala-trace-debug, vous pouvez taper quelque chose comme ceci:
Debug.trace(1 + 2)
Et obtenez ceci:
"3" in thread main:
path.to.file(file.Scala: 22) // click-able stack trace
Vous pouvez personnaliser le nombre de lignes de trace de la pile, comme ceci:
Et si vous faitesinfo.collaboration_station.debug._
, vous pouvez même faire ceci:
Debug.trace(1 + 2, 3) // 3 lines of stack trace
val three = 3.trace
...
"3" in thread main:
path.to.file(file.Scala: 22)
Enfin, il y a le support des expressions:
Debug.traceExpression{
val myVal = 4
1 + 2 + myVal
}
...
"{
val myVal = 4;
(3).+(myVal)
} -> 7" in thread main:
at main.Main$.main(Main.scala:12)
Contrairement à l'autre bibliothèque, ce qui est plus orienté vers le débogage. Si je voulais fournir un historique de ce qui se passait et que je ne voulais pas que l'utilisateur voie une trace de pile, je n'utiliserais pas cet outil.
Vérifiez la bibliothèque sourcecode de Haoyi Li, je pense que cela vous donne ce que vous cherchez.
SourceCode est une petite bibliothèque Scala pour qui fournit un contexte "code source " commune à votre programme lors de l'exécution, semblable à __name__, __LINE__ de C++ ou le __FILE__ Ruby Python. Par exemple, vous pouvez demander le nom de fichier et le numéro de ligne du fichier en cours, soit via la syntaxe() ou via un implicite.
Voir par exemple https://github.com/lihaoyi/sourcecode#logging
Vous pouvez utiliser sourcecode.File et sourcecode.Line pour définir log fonctions qui capture automatiquement leur numéro de ligne et de nom de fichier
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