例外からスタックトレースを取得すると、ファイルと行番号が取得されます。私は私の報告のためにこのようなものが必要なので、私は非常に速く原因になる可能性があります。Scalaには、LINE、FILEのような "マクロ"定義が用意されていますか?
私は特にLINEとFILEマクロを探しています。 Scalaにこれのようなものはありますか?
例外からスタックトレースを取得すると、ファイルと行番号が取得されます。私は私の報告のためにこのようなものが必要なので、私は非常に速く原因になる可能性があります。Scalaには、LINE、FILEのような "マクロ"定義が用意されていますか?
私は特にLINEとFILEマクロを探しています。 Scalaにこれのようなものはありますか?
ScalaでもJavaでもこのようなマクロはありません。もちろん、行番号情報はバイトコードに格納されていますが(デバッグの目的でも)、それを取得するAPIはありません。
クラス名と行番号を持つスタックトレースは、ネイティブThrowable.fillInStackTrace()
によって生成されます。ロギングライブラリはThread.getStackTrace()
を使用することもできます。
どちらの場合も、を解析し、スタックトレースを検索し、現在の場所を見つけます。スタックトレースの生成には時間がかかりますので避けてください。
Scalaにマクロ機能を提供するプロジェクトです。
おそらくあなたは、あなたがsourcecodeライブラリは、マクロに基づいており、コンパイル時にメタデータを提供している
これはLispマクロに関するプロジェクトなので、もっと複雑なことですが、非常に興味深いですが、ありがとうございます。 – greenoldman
必要なものを議論するプロジェクトチームに近づくことができました。 (自分のページから取られた)
例:
object Main extends App {
def log(message: String)(implicit line: sourcecode.Line, file: sourcecode.File) =
println(s"${file.value}:${line.value} $message")
log("foo")
}
これを印刷します:
/Users/jhoffmann/Development/sourcecode/src/main/scala/Main.scala:5 fooのを
コード内の任意の場所で使用できます。
私はマクロがないことを知っていますが、何らかの方法でマクロ名を付ける必要がありました:-)とにかく、これは非常に悲しいニュースです - 私は多くの場所でそれを必要とします - しかし、いつも! – greenoldman