Доступна ли в Scala Reflection вселенная времени компиляции?

В этом документе:

http://docs.scala-lang.org/overviews/reflection/environment-universes-mirrors.html

Вселенная отражения Scala имеет 2 реализации: 1 для среды выполнения (в scala.reflect.runtime) и 1 для времени компиляции (в scala.reflect.macro).

Однако я могу получить доступ к среде выполнения только следующим образом:

scala.reflect.runtime.universe

Пакет юниверса времени компиляции не имеет конкретной реализации. Является ли реализация и возможность называть ее намеренно скрытой, а реализация жестко запрограммирована компилятором scala? Если это так, то в чем причина указывать юниверс перед использованием отражения Scala?

Большое спасибо за понимание.


person tribbloid    schedule 05.06.2016    source источник
comment
Вы можете получить доступ к некоторому юниверсу времени компиляции в реализации макроса, импортировав его из контекста, например def macroImpl(c: whitebox.Context)(arg: c.Tree) = { import c.universe._; /* other code */ }   -  person Kolmar    schedule 05.06.2016


Ответы (1)


в чем причина указывать юниверс перед использованием отражения Scala?

Поскольку макросы в Scala зависят от контекста, и импорт юниверса для каждого макроса проходит в контексте.

person Michael Lafayette    schedule 05.06.2016