问题标签 [scala-quasiquotes]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - 如何将准引号与先前定义的对象一起使用
我刚开始学习 scala 编译时反射,并被 Scala 官方指南介绍给了 quasiquotes。
reify
我仍在苦苦挣扎的一个概念是,如果我想为已定义的对象生成 AST,我应该如何使用准引号(或者,就此而言)。假设我有一个对象:
为了得到一棵树,我知道我可以做到
然而,这样做会阻止我在我的范围内实际定义对象(而且我还需要将它完全定义在一个字符串中,从而将所有代码安全性抛到窗外)。
为了得到那棵树,我想做的是这样的:
我想定义对象,然后使用该定义对其执行一些检查(如果需要,在编译时抛出一些异常),使用宏。据我了解,要使用宏,我需要树(或者至少是表达式)。
我已经知道如何在运行时使用 Scala 反射进行我想要的检查,但我认为使用 AST 可能是一个好主意(而且,在这个过程中,我会学到一些东西)。不过,我感觉我误解了一些关于如何使用 AST 的基本概念——似乎人们只能根据调用站点上声明的代码生成 AST。我很困惑。
我在这里有什么误解?
scala - MacroAnnotation 从方法的类型成员中删除注释
我正在学习如何编写 Scala 宏并编写了一个宏注释,该注释从带注释的函数的类型参数中删除了注释。这里是。
要删除的注释:
删除注释的宏的实现:
测试方法:
这似乎工作正常。为了检查它,我将添加的日志与println(annottees)
and进行了比较println(expandees)
:
关于解决方案的问题是它看起来很难阅读。也许我没有充分发挥准引号的潜力。有没有办法简化宏实现(可能更广泛地使用准引号......)?
scala - 在 quasiquote 中使用 ClassSymbol
我有一个ClassSymbol
并且想要生成一个零参数方法 throwing ???
。这是我的尝试:
假设这object Test
是我们拥有ClassSymbol
的类型。
我。
结果:
二、
结果:
三、
结果:
所以我最终使用了看起来很吓人的方法三。
是否有“本机”方式ClassSymbol
在准引用中使用?
scala - 使用 freshName 作为参数而不显式指定类型
我正在尝试在以下宏中使用 freshName 作为参数名称:
我。
它抛出编译错误:
二、
用硬编码标识符替换新名称使其工作:
有没有办法在implicit ${c.freshName()}
不明确指定参数类型的情况下使用?
scala - 如何忽略准引号中未使用的警告?
我有一个使用准引号的宏,例如:
这给了我以下警告:
使用通配符不起作用:
那失败了:
我不知道什么suppress this warning with `source@_`
意思。
如果我从字面上理解为:
然后我得到:
如何忽略这些警告?
scala - 如何在 scala.meta quasiquotes 中使自定义类型可提升
我有以下代码,其中 x 是自定义类型的实例。该代码是从一个更大的项目中提取的最小代码。
在另一个文件中我有
Scala 在 if 语句中给了我以下错误:
我相信这个问题与使用 scala.meta.quasiquotes 而不是来自 scala.reflect 的问题有关。如果我尝试在 CustomInt 文件中使用 scala.meta,我会在提升函数上出现错误,因为 scala meta 没有它。
如何使我的 CustomInt 类在 scala.meta quasiquotes 中可提升?