Spec-Zone.ru › Scala 2.13 Reflection

Пакет scala.reflect.macros.blackbox

пакет blackbox

Члены типов

трактContext extends Aliases with Enclosures with Names with Reifiers with FrontEnds with Infrastructure with Typers with Parsers with Evals with ExprUtils with Internals

ЭКСПЕРИМЕНТАЛЬНО

Контекст макросов 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

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API