问题标签 [scala-macro-paradise]

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 回答
672 浏览

scala - 为密封类型的所有子类型提供隐式

在我的应用程序中,我有多个案例类和对象,它们是密封特征层次结构的一部分。我在 Akka 中将它们用作消息。

在通过 websocket 发送之前,这些类需要转换为用户友好的形式。

以前我使用大模式匹配在单个位置转换它们,但随着类型数量的增长,我想使用隐式转换:

我想按如下方式使用它们:

我很想知道是否有任何“神奇”的方式可以在convert2不编写宏的情况下自动生成类似的东西。也许已经有一个提供这样宏的库?

0 投票
0 回答
45 浏览

scala - 从其字段树访问类树

我想编写一个丰富案例类的宏。当我这样声明我的案例类时:

case class User(int id, @tagged name)

我希望能够将一些东西注入到Tree只有注释的这个类中。到目前为止,我只能到达Symbol封闭类的,但看起来还不够(请参阅尤金的回答here)。我也不想使用已弃用的c.enclosingClass. 有没有办法ClassDef在天堂 2.1.0 (Scala 2.11) 中找到父母?

0 投票
1 回答
83 浏览

scala - 在 ast 中替换术语名称的简单方法

我有以下代码:

通过此代码,我想x在下一个使用示例中替换变量名 ():

这是简单的方法,但是如果我有一个包含许多表达式的大方法,那么替换变量名的最简单方法是什么(例如from xto )?y

0 投票
1 回答
50 浏览

scala - 扩展给定类型时可以自动运行 Scala 宏吗?

目前,我使用 Scala 宏注释自动将一些代码生成到 Scala 对象中。它是这样工作的:

我发现必须扩展和Constants注释有点多余。我知道宏注释可以插入零件。我的问题反过来了:有什么方法可以通过简单地扩展一个类型(这里, )来运行一些宏代码(例如模拟 的存在)?PopoverCommands@constantsextends Constants@constantsConstants

0 投票
1 回答
632 浏览

scala - 从 scala 宏中按名称访问类定义

我正在尝试创建一个 Scala 宏,它定义了一个 Class 参数,并根据作为参数提供的 Class 的实现来修改它所附加的类。

我设法创建了一个简单的宏,它能够从注释中提取参数,从而生成一个包含完整类名的字符串表示的 TypeName 对象。

现在的问题是我需要从宏实现中访问 A 的定义(具体来说,我想看看构造函数参数是什么)。

有没有办法以某种方式访问​​/创建 TypeTag[A] ?有没有办法可以访问 A 类的 AST?

为了说明我想要实现的目标,这是我目前拥有的宏定义:

0 投票
1 回答
540 浏览

scala - 带有import语句的scala宏不起作用

我正在注释一个特征,例如:

然后我得到了@ScreenModel 的实现,例如:

所以,我得到:

“没有同伴的顶级类只能扩展为同名类或块”

但是,如果我在 AAA 类中的 AAA 类之前移动导入,那么它可以工作:

为什么?

0 投票
1 回答
184 浏览

scala - 带有默认参数的宏注释

从 Scala 宏注解中获取参数解释了如何从宏注解中获取参数。但是,如果我有几个具有默认值的参数:

我需要写(基于该问题的答案)

中的逻辑???似乎变得非常讨厌:我需要同时处理位置参数和命名参数,不能简单地访问默认值等。有​​没有办法简化它?

0 投票
0 回答
90 浏览

scala - Scala 宏注解扩展顺序

将首先转换类(并且能够修改@AnotherMacro)还是方法?这是有保证的吗?

0 投票
0 回答
88 浏览

scala - 在方法上展开宏注释时查找封闭类中字段的类型

我有一个处理日志记录的宏注释,并且想要同时处理 SLF4J 和 Log4j2 日志记录。不幸的是,这需要找到logger字段的类型。当注释来自其他问题的课程时,我知道如何做到这一点。但是我还没有弄清楚方法上有注释的情况。这是我尝试过的:

这会编译(尽管enclosingClass已弃用),但使用此注解编译类会导致illegal cyclic reference. 对整个封闭类进行类型检查也不起作用。

有什么办法吗?

0 投票
0 回答
526 浏览

scala - 创建扩展为类定义的 Scala 宏

正如标题所示,我正在尝试创建一个生成类定义的 Scala 宏。基本上我想最终做到以下几点:

这甚至可能吗?如果是这样,谁能指出我如何做到这一点的正确方向?实际上,我什至无法让以下简单的宏工作:

这让我收到以下错误消息:

任何人都可以理解这一点吗?非常感谢您的帮助。