Описание тега scala-quasiquotes

В Scala квазицитаты поставляются в официальном дистрибутиве Scala как часть scala-reflection.jar.
1 ответ

Вызов функции с неявным параметром из квазицитата

По какой-то причине каждый раз, когда я пытаюсь вызвать функцию с неявным параметром из квазицитат, происходит сбой с Can't unquote x.universe.Tree, consider providing an implicit instance of Liftable[x.universe.Tree] Что в этом плохого? Разве мне н…
1 ответ

Квазицитаты для нескольких параметров и списков параметров

Квазицитаты удивительны - они делают написание макросов в Scala чрезвычайно менее болезненным, и по моему опыту они почти всегда работают точно так, как я ожидал. И что самое приятное, они теперь доступны в виде плагина в Scala 2.10. Этот вопрос о …
01 сен '13 в 14:51
1 ответ

Как использовать макросы Scala для создания новых частичных функций или их преобразования?

У меня возникают проблемы при написании макроса, который преобразует данную частичную функцию и создает новую частичную функцию. Например, я хочу иметь возможность разложить данную частичную функцию на ее элементы - механизм связывания, условие охра…
1 ответ

Используйте макросы scala для копирования метода из класса в объект-компаньон

Я пойду прямо к делу. Допустим, у меня есть следующее определение черты: trait Routable{ def routing(): String } И я определяю следующий класс: case class MyEvent(name: String, age: Int) extends Routable{ override def routing(): String = "this is my…
01 апр '18 в 14:32
1 ответ

Отмена цитирования AST с использованием квазицитат и дерева, возвращенного из reify

Я пытался использовать Toolbox и квазицитатуру вместе для выполнения задач генерации кода, и столкнулся с StackruError при использовании AST объекта, возвращенного из reify(x).treeмой код выглядит следующим образом: abstract class A[T] {def i: T} cl…
29 авг '14 в 13:53
0 ответов

Scala макросы. Как создать экземпляр подкласса и динамически смешать черту

Мотивация: (не тесно связана с этой темой, но излагает вариант использования. Skippable) я использую Scala.js написать код React. Теперь у меня есть form который содержит кучу inputс, каждый нуждается в onChange callback в его опорах. См. Контролиру…
1 ответ

Что такое "статистика" в Scala AST?

В docs.scala-lang.org/overviews/quasiquotes/syntax-summary.html#definitions я вижу эту "переменную", называемую $stats повсюду. Что это значит? Это должно означать "заявления"? Это было бы немного странно для меня, так как вы можете иметь выражения.…
27 фев '18 в 14:16
1 ответ

Используйте Scala Quasiquotes для генерации класса, который наследуется от известного класса

Это легче объяснить в коде. Я хочу сделать что-то вроде: import scala.reflect.runtime.currentMirror import scala.tools.reflect.ToolBox val toolbox = currentMirror.mkToolBox() val universe: scala.reflect.runtime.universe.type = scala.reflect.runtime.…
30 ноя '15 в 23:07
0 ответов

Как извлечь первичные параметры конструктора с помощью квазицитаты

В настоящее время я использую: annottees map (_.tree) match { case (classDef @ q"$mods class $tpname[..$tparams] $ctorMods(...$paramss) extends { ..$earlydefns } with ..$parents { $self => ..$stats }") :: Nil => извлечь как classDef и paramss,…
1 ответ

"Ссылка на реализацию макроса имеет неправильную форму" в примерах документации Scala

Следующий макрос вставлен из http://docs.scala-lang.org/overviews/quasiquotes/usecases.html: import reflect.macros.Context import language.experimental.macros val universe = reflect.runtime.universe; import universe._ import reflect.runtime.currentM…
23 май '14 в 11:39
1 ответ

Как использовать Shapeless в квазицитате?

Я пытаюсь позвонить Shapeless макрос изнутри quasiquote с Scala и я не получаю то, что хотел бы получить. Мой макрос не возвращает ошибок, но не расширяется Witness(fieldName) в Witness.Lt[String] val implicits = schema.fields.map { field => val …
1 ответ

Scala Quasiquote Lifting

Документация Scala для Quasiquotes упоминает это при объяснении Lifting: Можно также сочетать лифтинг и расстановку кавычек: scala> val ints = List(1, 2, 3) scala> val f123 = q"f(..$ints)" f123: universe.Tree = f(1, 2, 3) scala> val intss =…
10 май '15 в 19:46
1 ответ

Макрос scala со свежим идентификатором

У меня есть макрос, который я хочу использовать для регистрации времени, которое требуется для выполнения блока, который может вернуть что-то полезное. Так что, если у меня есть что-то вродеval y = f(x) Я поменяю на val y = Timed(f(x)) чтобы получит…
14 апр '16 в 10:25
1 ответ

Надежность сопоставления образцов деревьев с квазицитатами

У меня есть макрос, и часть этого макроса состоит в замене каждого вызова определенного метода чем-то другим. Для этого я использую Transformer и стараться соответствовать каждому Tree который входит в transform метод против квазицитаты. Когда я пиш…
01 сен '16 в 11:56
1 ответ

scala квазиквоты строковая переменная поднимается в несколько шагов

Это то, что я хочу: scala> var x:Int = 10 x: Int = 10 scala> var y:Int = 20 y: Int = 20 scala> val ret = q"return $x>$y" ret: universe.Return = return 10.$greater(20) scala> val result1 = toolbox.compile(ret)() result1: Any = false Но…
13 сен '17 в 15:09
0 ответов

Отличительный Tuple1 в сопоставлении квазицит

Предположим, я хочу макрос, который принимает выражение и возвращает арность, если это литерал кортежа. Нечто подобное работает для кортежей, но возвращает Some(1) вместо None для всего остального: import scala.reflect.macros.blackbox.Context class …
1 ответ

Переменная длина "выберите" с квази-кавычками

С помощью квазицитат Scala вы можете легко создавать деревья выбора, например: > tq"a.b.MyObj" res: Select(Select(Ident(TermName("a")), TermName("b")), TermName("MyObj")) Мой вопрос: как мне это сделать, если список вещей, из которых можно выбрат…
19 июл '16 в 16:50
1 ответ

Как добавить комментарии в квазицитате

Я пытаюсь вставить комментарии класса для квази кавычек, как это так q""" package somePackage { /** * This is a comment */ public class SomeClass { } } """ Но это исключение Exception in thread "main" java.lang.IllegalArgumentException: not legal pa…
1 ответ

Как объявить пакеты с квазицитатами

Я пытаюсь использовать квази-кавычку для генерации пакета AST. У меня есть строковая переменная, которая перечисляет путь пакета, так что val pkg = "database.dao" Когда я использую квази цитату q"package $pkg говорит мне, что мне нужна RefTree вмест…
2 ответа

Неработающий пример макроса квазицитаты Scala

Я взял этот пример квазицитаты Scala из книги "Программирование Scala" (2-е издание) Я получаю эту ошибку: https://issues.scala-lang.org/browse/SI-9711 Вывод типа говорит "Trees#Tree", но вывод типа выключен. import scala.reflect.api.Trees // For Tr…