Обновление @ralph Ну, это вопрос от 2+ лет назад, но так как у меня такая же потребность в __LINE__
и __FILE__
, а вы упомянули SCALA;Вот некоторые идеи, которые я имею, используя макросы Scala (начиная с v2.10.0-RC1 )
def $currentPosition:String = macro _currentPosition;
def _currentPosition(c:Context):c.Expr[String]={ import c.universe._;
val pos = c.enclosingPosition;
c.Expr(Literal(Constant(
s"${pos.source.path}: line ${pos.line}, column ${pos.column}" )))
}
Макросы оцениваются в время компиляции ,$currentPosition
заменяется литеральной строкой, которая описывает его положение в исходном коде.Например, поместите println
в строке 13, чтобы отобразить:
/sandbox/tmp_juno_workspace2/LogMacro_Test/src/test/Trial.scala: line 13, column 15
Я не слишком много играл с этими механизмами, но, настроив эту штуку, можно развить функции ведения журнала, которые онтребует (я должен добавить, что написание макросов может быть трудным - это для меня!).