Spec-Zone.ru › Scala 2.13 Reflection

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

пакет whitebox

Члены типов

трактContext extends blackbox.Context

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

Контекст Scala-макросов whitebox.

См. обзорную страницу для описания работы макросов. Этот раздел документации предоставляет информацию об API, доступном авторам макросов.

Контекст макроса оборачивает вселенную компилятора, представленную в universe и имеющую тип scala.reflect.macros.Universe. Этот тип представляет собой уточнение универсального API рефлексии, представленного в scala.reflect.api.Universe. Расширенная Вселенная предоставляет возможность изменения отражаемых артефактов (например, макросы могут изменять типы деревьев компилятора, добавлять аннотации к символам, представляющим определения и т. д.) и предоставляет некоторые внутренние возможности компилятора, такие как Symbol.deSkolemize или Tree.attachments.

Еще одной фундаментальной частью контекста макроса является macroApplication, которая предоставляет доступ к дереву, подвергающемуся расширению макроса. Части этого дерева можно найти в аргументах соответствующих реализаций макроса и в prefix, но macroApplication дает полную картину.

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

Если макрос def ссылается на реализацию макроса impl, использующую whitebox.Context, то этот макрос def становится whitebox-макросом, получая возможность уточнить тип своего расширения за пределами его официального возвращаемого типа, что позволяет реализовать ряд важных случаев использования. Blackbox-макросы, то есть те, которые определены с blackbox.Context, этого сделать не могут, поэтому они менее мощные. Тем не менее, blackbox-макросы получат лучшую поддержку, чем whitebox-макросы, поэтому выбирайте с умом. Дополнительную информацию см. в Руководстве по макросам.

См. также

scala.reflect.macros.blackbox.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/whitebox/index.html

Spec-Zone.ru

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