Пакет scala.reflect.macros.blackbox
пакет blackbox
© 2002-2019 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://www.scala-lang.org/api/2.13.0/scala-reflect/scala/reflect/macros/blackbox/index.html
ЭКСПЕРИМЕНТАЛЬНО
Контекст макросов Scala blackbox.
См. страничку обзора для описания принципов работы макросов. Данный элемент документации содержит информацию об API, доступном разработчикам макросов.
Контекст макроса оборачивает вселенную компилятора, представленную в
universeи имеющую тип scala.reflect.macros.Universe. Этот тип является уточнением универсального API рефлексии, предоставленного в scala.reflect.api.Universe. Расширенная вселенная предоставляет возможность изменения рефлективных артефактов (например, макросы могут изменять типы деревьев компилятора, добавлять аннотации к символам, представляющим определения и т.д.) и предоставляет доступ к некоторым внутренним функциям компилятора, таким какSymbol.deSkolemizeилиTree.attachments.Еще одной фундаментальной частью контекста макроса является
macroApplication, который предоставляет доступ к дереву, над которым происходит расширение макроса. Части этого дерева можно найти в аргументах соответствующих реализаций макроса и вprefix, ноmacroApplicationдает полную картину.Помимо этого, контексты макросов предоставляют средства для проверки типов, изучения таблицы символов компилятора и окружающих деревьев и единиц компиляции, оценки деревьев, регистрации предупреждений/ошибок и многое другое. Обратитесь к документации основных трактов в этом пакете, чтобы узнать подробности.
Если макрос def ссылается на реализацию макроса impl, которая использует
blackbox.Context, то этот макрос def становится blackbox-макросом, что означает, что его расширение будет преобразовано в его возвращаемый тип, обеспечивая соответствие этого макроса его сигнатуре типа. Whitebox-макросы, т.е. те, которые определены с помощьюwhitebox.Context, не ограничены этим ограничением, что позволяет использовать множество важных случаев использования, но они также будут получать меньше поддержки, чем blackbox-макросы, поэтому выбирайте разумно. См. Руководство по макросам для получения дополнительной информации.scala.reflect.macros.whitebox.Context