Вопросы по теме '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 просмотров
schedule
22.05.2024
Делают ли макросы возможными естественные цепочки сравнений в Scala?
Scala не обеспечивает цепных сравнений, как это делает Python:
// Python:
0 < x <= 3
// Scala:
0 < x && x <= 3
Позволит ли Scala 2.10 с новой функцией макросов написать библиотеку, добавляющую эту функцию? Или это выходит...
204 просмотров
schedule
13.04.2022
Как я могу создать экземпляр класса Case с аргументами конструктора без параметров в Scala?
Я делаю приложение Scala, которое устанавливает значения поля отражения. Это работает нормально.
Однако для установки значений полей мне нужен созданный экземпляр. Если у меня есть класс с пустым конструктором, я могу легко сделать это с помощью...
14570 просмотров
schedule
29.04.2022
Можно ли (повторно) связать приемник внутри блока кода?
Проблема
Этот вопрос мотивирован попыткой найти решение для этого вопроса .
Предположим, вы хотите построить иерархическую структуру, используя следующий синтаксис:
root {
subA {
subB("b1.1")
subB("b1.2")
}
}
Строительный...
118 просмотров
schedule
04.02.2024
Как отличить неявное преобразование, выведенное компилятором, от явно вызванного?
Давайте представим передачу этих двух эквивалентных выражений в макрос Scala:
с неявным преобразованием, выведенным компилятором: 1+"foo"
с явно вызванным неявным преобразованием: any2stringadd(1)+"foo"
Есть ли способ различить эти два...
292 просмотров
schedule
19.02.2023
Почему в этом макросе не выполняется равенство типов, но успешно выполняется соответствие типов?
Я пытаюсь определить тип параметра, переданного в макрос во время компиляции. Кажется, это работает, когда я использую <:< , но не когда я использую =:= . Я не уверен, почему. Может кто-то указать мне верное направление? Я включил пример...
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 просмотров
schedule
30.09.2022
Можно ли при проверке кода внутри макроса обнаружить ошибку проверки типов, вызванную раскрытием макроса в этом коде?
Я хотел бы написать макрос, который компилирует код, который он получает как литерал String, и обнаруживает ошибку проверки типа в скомпилированном коде, которая возникает из-за сбоя расширения макроса (либо макрос был прерван, либо расширенный макрос...
76 просмотров
schedule
05.01.2024
Эквивалент попытки 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 просмотров
schedule
24.05.2024
Поиск фактического типа в макросе
Я пытаюсь написать макрос, который извлекает информацию о типе. Вот минимизированная версия.
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