问题标签 [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.
scala - 为密封类型的所有子类型提供隐式
在我的应用程序中,我有多个案例类和对象,它们是密封特征层次结构的一部分。我在 Akka 中将它们用作消息。
在通过 websocket 发送之前,这些类需要转换为用户友好的形式。
以前我使用大模式匹配在单个位置转换它们,但随着类型数量的增长,我想使用隐式转换:
我想按如下方式使用它们:
我很想知道是否有任何“神奇”的方式可以在convert2
不编写宏的情况下自动生成类似的东西。也许已经有一个提供这样宏的库?
scala - 从其字段树访问类树
我想编写一个丰富案例类的宏。当我这样声明我的案例类时:
case class User(int id, @tagged name)
我希望能够将一些东西注入到Tree
只有注释的这个类中。到目前为止,我只能到达Symbol
封闭类的,但看起来还不够(请参阅尤金的回答here)。我也不想使用已弃用的c.enclosingClass
. 有没有办法ClassDef
在天堂 2.1.0 (Scala 2.11) 中找到父母?
scala - 在 ast 中替换术语名称的简单方法
我有以下代码:
通过此代码,我想x
在下一个使用示例中替换变量名 ():
这是简单的方法,但是如果我有一个包含许多表达式的大方法,那么替换变量名的最简单方法是什么(例如from x
to )?y
scala - 扩展给定类型时可以自动运行 Scala 宏吗?
目前,我使用 Scala 宏注释自动将一些代码生成到 Scala 对象中。它是这样工作的:
我发现必须扩展和Constants
注释有点多余。我知道宏注释可以插入零件。我的问题反过来了:有什么方法可以通过简单地扩展一个类型(这里, )来运行一些宏代码(例如模拟 的存在)?PopoverCommands
@constants
extends Constants
@constants
Constants
scala - 从 scala 宏中按名称访问类定义
我正在尝试创建一个 Scala 宏,它定义了一个 Class 参数,并根据作为参数提供的 Class 的实现来修改它所附加的类。
我设法创建了一个简单的宏,它能够从注释中提取参数,从而生成一个包含完整类名的字符串表示的 TypeName 对象。
现在的问题是我需要从宏实现中访问 A 的定义(具体来说,我想看看构造函数参数是什么)。
有没有办法以某种方式访问/创建 TypeTag[A] ?有没有办法可以访问 A 类的 AST?
为了说明我想要实现的目标,这是我目前拥有的宏定义:
scala - 带有import语句的scala宏不起作用
我正在注释一个特征,例如:
然后我得到了@ScreenModel 的实现,例如:
所以,我得到:
“没有同伴的顶级类只能扩展为同名类或块”
但是,如果我在 AAA 类中的 AAA 类之前移动导入,那么它可以工作:
为什么?
scala - 带有默认参数的宏注释
从 Scala 宏注解中获取参数解释了如何从宏注解中获取参数。但是,如果我有几个具有默认值的参数:
我需要写(基于该问题的答案)
中的逻辑???
似乎变得非常讨厌:我需要同时处理位置参数和命名参数,不能简单地访问默认值等。有没有办法简化它?
scala - Scala 宏注解扩展顺序
将首先转换类(并且能够修改@AnotherMacro
)还是方法?这是有保证的吗?
scala - 在方法上展开宏注释时查找封闭类中字段的类型
我有一个处理日志记录的宏注释,并且想要同时处理 SLF4J 和 Log4j2 日志记录。不幸的是,这需要找到logger
字段的类型。当注释来自其他问题的课程时,我知道如何做到这一点。但是我还没有弄清楚方法上有注释的情况。这是我尝试过的:
这会编译(尽管enclosingClass
已弃用),但使用此注解编译类会导致illegal cyclic reference
. 对整个封闭类进行类型检查也不起作用。
有什么办法吗?
scala - 创建扩展为类定义的 Scala 宏
正如标题所示,我正在尝试创建一个生成类定义的 Scala 宏。基本上我想最终做到以下几点:
这甚至可能吗?如果是这样,谁能指出我如何做到这一点的正确方向?实际上,我什至无法让以下简单的宏工作:
这让我收到以下错误消息:
任何人都可以理解这一点吗?非常感谢您的帮助。