Описание тега scala-quasiquotes
В Scala квазицитаты поставляются в официальном дистрибутиве Scala как часть scala-reflection.jar.
1
ответ
Вызов функции с неявным параметром из квазицитата
По какой-то причине каждый раз, когда я пытаюсь вызвать функцию с неявным параметром из квазицитат, происходит сбой с Can't unquote x.universe.Tree, consider providing an implicit instance of Liftable[x.universe.Tree] Что в этом плохого? Разве мне н…
22 окт '15 в 08:57
1
ответ
Квазицитаты для нескольких параметров и списков параметров
Квазицитаты удивительны - они делают написание макросов в Scala чрезвычайно менее болезненным, и по моему опыту они почти всегда работают точно так, как я ожидал. И что самое приятное, они теперь доступны в виде плагина в Scala 2.10. Этот вопрос о …
01 сен '13 в 14:51
1
ответ
Как использовать макросы Scala для создания новых частичных функций или их преобразования?
У меня возникают проблемы при написании макроса, который преобразует данную частичную функцию и создает новую частичную функцию. Например, я хочу иметь возможность разложить данную частичную функцию на ее элементы - механизм связывания, условие охра…
08 янв '17 в 23:24
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 в его опорах. См. Контролиру…
02 мар '17 в 02:36
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,…
06 авг '14 в 01:10
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 …
28 июл '15 в 14:19
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 …
10 июн '17 в 15:32
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…
02 сен '15 в 08:24
1
ответ
Как объявить пакеты с квазицитатами
Я пытаюсь использовать квази-кавычку для генерации пакета AST. У меня есть строковая переменная, которая перечисляет путь пакета, так что val pkg = "database.dao" Когда я использую квази цитату q"package $pkg говорит мне, что мне нужна RefTree вмест…
20 авг '15 в 08:44
2
ответа
Неработающий пример макроса квазицитаты Scala
Я взял этот пример квазицитаты Scala из книги "Программирование Scala" (2-е издание) Я получаю эту ошибку: https://issues.scala-lang.org/browse/SI-9711 Вывод типа говорит "Trees#Tree", но вывод типа выключен. import scala.reflect.api.Trees // For Tr…
20 мар '16 в 19:14