Вопросы по теме 'scala-macros'

макросы, сращивание и сопоставление с образцом
Есть ли способ использовать аргумент макроса в сопоставлении с образцом? Я хотел бы сделать это: def extr(X:AnyRef) = macro extrImpl def extrImpl(c:Context)(X:c.Expr[AnyRef]):c.Expr[AnyRef] = { import c.universe._ val tree = reify { new...
786 просмотров

Делают ли макросы возможными естественные цепочки сравнений в Scala?
Scala не обеспечивает цепных сравнений, как это делает Python: // Python: 0 < x <= 3 // Scala: 0 < x && x <= 3 Позволит ли Scala 2.10 с новой функцией макросов написать библиотеку, добавляющую эту функцию? Или это выходит...
204 просмотров

Как я могу создать экземпляр класса Case с аргументами конструктора без параметров в Scala?
Я делаю приложение Scala, которое устанавливает значения поля отражения. Это работает нормально. Однако для установки значений полей мне нужен созданный экземпляр. Если у меня есть класс с пустым конструктором, я могу легко сделать это с помощью...
14570 просмотров

Можно ли (повторно) связать приемник внутри блока кода?
Проблема Этот вопрос мотивирован попыткой найти решение для этого вопроса . Предположим, вы хотите построить иерархическую структуру, используя следующий синтаксис: root { subA { subB("b1.1") subB("b1.2") } } Строительный...
118 просмотров
schedule 04.02.2024

Как отличить неявное преобразование, выведенное компилятором, от явно вызванного?
Давайте представим передачу этих двух эквивалентных выражений в макрос Scala: с неявным преобразованием, выведенным компилятором: 1+"foo" с явно вызванным неявным преобразованием: any2stringadd(1)+"foo" Есть ли способ различить эти два...
292 просмотров

Почему в этом макросе не выполняется равенство типов, но успешно выполняется соответствие типов?
Я пытаюсь определить тип параметра, переданного в макрос во время компиляции. Кажется, это работает, когда я использую <:< , но не когда я использую =:= . Я не уверен, почему. Может кто-то указать мне верное направление? Я включил пример...
151 просмотров
schedule 08.07.2022

Чтение ресурсов из макроса в проекте SBT
Предположим, у меня есть проект Scala с тремя подпроектами с такими файлами: foo/src/main/scala/Foo.scala foo/src/main/resources/foo.txt bar/src/main/scala/Bar.scala bar/src/main/resources/bar.txt baz/src/main/scala/Baz.scala...
1130 просмотров
schedule 06.03.2024

Добавление псевдонимов для аннотаций макросов
При работе с DSL я хотел бы добавить несколько псевдонимов к существующей аннотации макроса и, если возможно, не вводить определение macroTransform . То есть я хочу объявить псевдоним для «заголовка макроса» вместо реализации макроса. Я делал...
160 просмотров
schedule 21.02.2024

ошибка: отсутствует тип параметра при склейке макроса
Изменить: я обнаружил свою ошибку - в квазицитатах для моего рекурсивного случая была ошибка, из-за которой он возвращал искаженную последовательность Я пытаюсь создать макрос, который превратит класс дела T в updateMap: Map[String,...
252 просмотров
schedule 05.08.2022

Макрос Scala для ярлыка
Я определил следующие макросы для получения файла, строки и объекта/класса из текущего местоположения: http://pastebin.com/UsNLemnK Используя SBT, я определил два проекта, чтобы сначала скомпилировать макросы, а затем сам проект, использующий эти...
106 просмотров
schedule 23.01.2023

Как я могу передать аргумент в реализацию аннотации макроса Scala?
У меня есть успех, когда аргумент аннотации является константой, например: @Annotation(2) class AnnotatedClass так как я могу получить значение в макросе impl с помощью: c.prefix.tree match { case Apply(_, List(Literal(Constant(x))))...
299 просмотров
schedule 09.09.2022

Сопоставление XML-литералов в макросах Scala
Я хочу преобразовать XML-литералы Scala с помощью макроса. (Не строковый литерал с XML, а фактические XML-литералы). Насколько я понимаю, XML-литералы на самом деле не встроены в язык на уровне AST, а обесцениваются в анализаторе. Что интересно,...
507 просмотров

Можно ли при проверке кода внутри макроса обнаружить ошибку проверки типов, вызванную раскрытием макроса в этом коде?
Я хотел бы написать макрос, который компилирует код, который он получает как литерал String, и обнаруживает ошибку проверки типа в скомпилированном коде, которая возникает из-за сбоя расширения макроса (либо макрос был прерван, либо расширенный макрос...
76 просмотров

Эквивалент попытки Rust! макрос на скале
Макрос Rust try! разворачивает Result s. Ok значения развернуты; Err приводит к немедленному возврату вложенного метода с Err . Реализация здесь: https://doc.rust-lang.org/std/macro.try!.html Это примерно эквивалентно Scala...
348 просмотров
schedule 29.11.2022

Квазиквоты Scala, разрушающие тип
Контекст: Я работаю над библиотекой для работы с JMX в Scala. Одна из целей - иметь строго типизированный интерфейс для Managed Beans. Я думаю, это похоже на библиотеку JMX Spring framework. Цель: макрос для десериализации TabularData в...
283 просмотров
schedule 11.05.2023

Отражение вложенного списка во время компиляции: typecheck List[List[Int]] возвращает List[List[]]?
Я использую аннотации макросов для проверки полей класса и добавления члена на основе этих полей. e.g. @AddVal class A(x: Int) расширяется до class A(x: Int){ val get: Int = x } После извлечения ValDef поле tpe по-прежнему...
52 просмотров
schedule 28.04.2022

Можно ли раскрыть в пакете макросов значение ast, присвоенное макросу?
так скажем, у меня есть два файла ... package a; private[a] class A {} object Macro { def apply[T](t: T): T = macro apply_impl } и package b; object CallMacro { Macro(new A) } Мне любопытно, можно ли заставить что-то подобное...
73 просмотров
schedule 29.08.2022

Как передать параметры в аннотацию с расширениями макросов
Я использую аннотацию макросов для создания кода. Я хотел бы изменить его поведение на основе дополнительных строковых параметров. Таким образом, для одного и того же кода будут получены разные результаты. Я внимательно следил за руководством по...
343 просмотров

Поиск фактического типа в макросе
Я пытаюсь написать макрос, который извлекает информацию о типе. Вот минимизированная версия. class Extractor[E] { def extract(entity: E): Unit = macro ExtractorImpl.extractImpl[E] } object ExtractorImpl { def extractImpl[E: c.WeakTypeTag](c:...
136 просмотров
schedule 04.11.2022

Получить класс Java из Scala TypeTag в макросах
В соответствии с этим вопросом/ответом Есть ли способ получить класс Java из тега или символа типа Scala (2.10)? Я должен использовать runtimeClass для получения Class из типа. Но если я делаю отражение в макросах, у меня нет доступа к...
99 просмотров
schedule 28.01.2023