问题标签 [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 - Scala 宏类型检查如何将标识符解析为类型?
我正在尝试创建一个只能应用于某种类型的注释宏。当我运行我的测试时,当注释仅应用于顶级对象时,我看到一个未找到类型的错误。
我的宏代码:
我的测试代码:
我的测试日志是:
我的调试打印告诉我提取的父类型在每个测试中都是相同的,但由于某种原因,顶级对象无法解析它TypeName("Labelled")
实际上是一个macrotests.Labelled
. 有没有人能在这里帮助阐明一下?该宏似乎在测试上下文之外工作,但我真的很想了解发生了什么,以便我可以编写一些适当的测试。
scala - 使 Scala 类使用宏扩展 trait/abstract 类
问题:
我想用 scala 宏使带注释的类成为另一个类的子类我有什么:
字段包装器:
一个抽象类(所有注释类的基类):
我有一个案例类:
如果用注释该类@GetFromDB
我想要的结果应该是这样的:
我看过类似的问题
那么我如何扩展该解决方案以达到预期的结果?
scala - 在宏中使用现有方法
假设我有一些带有一些方法的类
我需要重用 someMethod 并覆盖 id 我不知道为什么但它会抛出 Stackoverflow 而且我需要用 Clz 的参数/方法做一些事情而不返回结果
我试过的:
我如何覆盖 Clz 的 id 方法?
为什么它会抛出 StackOverflow?
scala - 如何在scala宏中获取复杂类型?
我有以下宏,它正在为源类的给定访问器构造一些 Field 类:
用法示例:
问题是weakTypeOf[D]
返回Seq
而不是期望Seq[Int]
。所以我需要在宏中传递复杂的完整类型,比如Map[String,Int]
or List[Option[SomeClass]]
,所以我可以用准引号替换它。
scala - 在 Scala 2.13 中。如何在宏中可靠地记录信息/警告/错误?
我正在编写一个宏,可以在编译期间记录一条短消息,使用 scala 2.13 的模式匹配和常量类型特性:
在测试的时候,我发现直接调用宏大部分时间都是有效的:
(这会生成正确的编译消息):
...但如果是隐式宏模式的一部分(https://docs.scala-lang.org/overviews/macros/implicits.html),则很少起作用:
所以我的问题是:
调用 c.info/warning/error 是登录编译时的正确方法吗?
如果是这样,为什么它们永远不会作为隐式宏模式的一部分?
非常感谢您的建议!
更新 1刚刚在https://github.com/fthomas/singleton-ops/blob/204195838ada34de7e453401fb06810ace2c99b0/src/main/scala/singleton/ops/impl/GeneralMacros.scala#L102找到了一个案例(错误)的解决方案
这是一个复杂的 hack,它通过在隐式函数的定义上添加 @implicitNotFound 注释来工作。到目前为止,我不知道警告和信息案例有任何类似的解决方案。然而,更简单的解决方案始终是首选
scala - Scala 3 中的宏注解
以下是来自Macros: the Plan for Scala 3 三年多前的引述:
例如,一个人将能够定义一个宏注解@json,它将一个 JSON 序列化器添加到一个类型中。
知道如何/如果这在 Scala 3 中实际上可行吗?
更一般地说,Scala 3 中是否有任何东西可以提供“宏注释”功能?以下是来自Macro Annotations - Scala 2.13的引用:
与之前版本的宏天堂不同,2.0 中的宏注释在以下意义上是正确的:1) 不仅适用于类和对象,还适用于任意定义,2)允许扩展类以修改甚至创建伴随对象