Есть ли у Scala «макро» определения, готовые к использованию - например, LINE, FILE? - PullRequest
5 голосов
/ 15 декабря 2011

Когда вы получаете трассировку стека из исключения, вы получаете файлы и номера строк. Мне нужно что-то подобное для моих отчетов, чтобы я мог быстро найти причину.

Я ищу, в частности, макросы LINE и FILE. Есть ли что-нибудь подобное в Scala?

Ответы [ 3 ]

6 голосов
/ 15 декабря 2011

Нет такого макроса ни в Scala, ни в Java. Конечно, информация о номере строки хранится в байт-коде (также для целей отладки), но нет API для ее получения.

Трассировки стека с именами классов и номерами строк генерируются с помощью собственного Throwable.fillInStackTrace(). Библиотеки журналирования могут также использовать Thread.getStackTrace().

В обоих случаях это сводится к разбору трассировки стека и нахождению нашего текущего местоположения. Обратите внимание, что генерация трассировки стека отнимает много времени и ее следует избегать.

2 голосов
/ 03 ноября 2017

Библиотека sourcecode основана на макросах и предоставляет метаданные во время компиляции.

Пример (взят со страницы):

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

Вы можете использовать импликации в любом месте своего кода.

1 голос
/ 15 декабря 2011

Это проект для обеспечения возможности макросов в Scala .

Возможно, вы можете обратиться к команде проекта, чтобы обсудить, что вам нужно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...