Satır numarasına sahip baskı ifadeleri istiyorsanız, bunu nasıl yapıyorsunuz?Scala'da ifadeleri/baskı ifadelerini satır numaralarıyla nasıl izleyebiliriz?
cevap
Ne yapmak istediğinize bağlı olarak değişir. scala-trace-debug kütüphanesi ile
, böyle bir şey yazabilirsiniz:
Debug.trace(1 + 2)
Ve bu olsun:
"3" in thread main:
path.to.file(file.Scala: 22) // click-able stack trace
Çok gibi yığın izlemesi satır sayısını özelleştirebilirsiniz:
Debug.trace(1 + 2, 3) // 3 lines of stack trace
Ve info.collaboration_station.debug._
yaparsanız, bunu yapabilirsiniz:
val three = 3.trace
... Nihayet
"3" in thread main:
path.to.file(file.Scala: 22)
, ifadeler için destek var:
Debug.traceExpression{
val myVal = 4
1 + 2 + myVal
}
...
"{
val myVal = 4;
(3).+(myVal)
} -> 7" in thread main:
at main.Main$.main(Main.scala:12)
diğer kütüphanede farklı olarak, bu daha fazladır hata ayıklamaya doğru. Ne olup bittiğine dair bir tarih vermek istedim ve kullanıcının bir yığın izi görmesini istemedim, bu aracı kullanmazdım.
Haoyi Li'nin sourcecode kütüphanesini kontrol edin, aradığınızı size verir. o Python'un __name__, C++ 'ın __LINE__ veya Ruby'nin __FILE__ benzer çalışma zamanında programınıza ortak "kaynak kodu" bağlam sağlar için
Sourcecode küçük Scala kütüphanesidir. Örneğin, , geçerli dosyanın dosya adı ve satır numarasını (0) () sözdizimi yoluyla veya bir örtük yoluyla sorabilirsiniz. örneğin
Bkz https://github.com/lihaoyi/sourcecode#logging
Bunu otomatik olarak satır numarası ve dosya adı
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
yakalama fonksiyonları log tanımlamak için sourcecode.File ve sourcecode.Line kullanabilirsiniz