问题标签 [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.

0 投票
1 回答
142 浏览

scala - 如何将准引号与先前定义的对象一起使用

我刚开始学习 scala 编译时反射,并被 Scala 官方指南介绍给了 quasiquotes。

reify我仍在苦苦挣扎的一个概念是,如果我想为已定义的对象生成 AST,我应该如何使用准引号(或者,就此而言)。假设我有一个对象:

为了得到一棵树,我知道我可以做到

然而,这样做会阻止我在我的范围内实际定义对象(而且我还需要将它完全定义在一个字符串中,从而将所有代码安全性抛到窗外)。

为了得到那棵树,我想做的是这样的:

我想定义对象,然后使用该定义对其执行一些检查(如果需要,在编译时抛出一些异常),使用宏。据我了解,要使用宏,我需要树(或者至少是表达式)。

我已经知道如何在运行时使用 Scala 反射进行我想要的检查,但我认为使用 AST 可能是一个好主意(而且,在这个过程中,我会学到一些东西)。不过,我感觉我误解了一些关于如何使用 AST 的基本概念——似乎人们只能根据调用站点上声明的代码生成 AST。我很困惑。

我在这里有什么误解?

0 投票
1 回答
78 浏览

scala - 将长准引用匹配器存储在变量中

我试图避免在比赛中重复长准引号。所以,我想转换这个:

像这样:

我试图用字符串插值做的一个可比较的例子:

这个例子也不起作用

我怎样才能做到这一点?(或者我可以吗?)

0 投票
1 回答
60 浏览

scala - MacroAnnotation 从方法的类型成员中删除注释

我正在学习如何编写 Scala 宏并编写了一个宏注释,该注释从带注释的函数的类型参数中删除了注释。这里是。

要删除的注释

删除注释的宏的实现

测试方法


这似乎工作正常。为了检查它,我将添加的日志与println(annottees)and进行了比较println(expandees)

关于解决方案的问题是它看起来很难阅读。也许我没有充分发挥准引号的潜力。有没有办法简化宏实现(可能更广泛地使用准引号......)?

0 投票
1 回答
61 浏览

scala - 在 quasiquote 中使用 ClassSymbol

我有一个ClassSymbol并且想要生成一个零参数方法 throwing ???。这是我的尝试:

假设这object Test是我们拥有ClassSymbol的类型。

我。

结果

二、

结果

三、

结果

所以我最终使用了看起来很吓人的方法三。

是否有“本机”方式ClassSymbol在准引用中使用?

0 投票
1 回答
61 浏览

scala - 使用 freshName 作为参数而不显式指定类型

我正在尝试在以下宏中使用 freshName 作为参数名称:

我。

它抛出编译错误:

二、

用硬编码标识符替换新名称使其工作:

有没有办法在implicit ${c.freshName()}不明确指定参数类型的情况下使用?

0 投票
0 回答
35 浏览

scala - 如何忽略准引号中未使用的警告?

我有一个使用准引号的宏,例如:

这给了我以下警告:

使用通配符不起作用:

那失败了:

我不知道什么suppress this warning with `source@_`意思。

如果我从字面上理解为:

然后我得到:

如何忽略这些警告?

0 投票
0 回答
25 浏览

scala - 如何在 scala.meta quasiquotes 中使自定义类型可提升

我有以下代码,其中 x 是自定义类型的实例。该代码是从一个更大的项目中提取的最小代码。

在另一个文件中我有

Scala 在 if 语句中给了我以下错误:

我相信这个问题与使用 scala.meta.quasiquotes 而不是来自 scala.reflect 的问题有关。如果我尝试在 CustomInt 文件中使用 scala.meta,我会在提升函数上出现错误,因为 scala meta 没有它。

如何使我的 CustomInt 类在 scala.meta quasiquotes 中可提升?