Scala宏是Scala的工具 - 一种通用编程语言 - 允许在Scala语言中针对Scala语法树进行编译时元编程。
我需要将 Expr 转换为 Tree 进行 Scala 3 宏开发,但我还没有找到合适的转换机制。 在 Scala 2 中,Expr 上存在一个树方法,它使得 t...
我需要将 az Expr 转换为 Tree 进行 Scala 3 宏开发,但我还没有找到合适的转换机制。 在 Scala 2 中,Expr 上存在一个树方法,它使得 t...
在 Scala 3 中,您可以使用 MacroAnnotaiton 做什么而您不能使用 Macros 做什么?
Scala 3.3.0-RC2 添加了 MacroAnnotation,但它有很多警告。主要是“新定义在宏扩展之外是不可见的”。 有很多例子...
有人知道,如何在不创建的情况下正确打印案例类类型层次结构吗?
我遇到了一个问题。我想为 Scala 中的任何类型制作一台打印机。 例如我有一个案例类 AAA 类(i:整数,s:字符串,o:选项 [Int],bbb:BBB) BBB 类(l:列表 [Int]) 定义解释T ...
我在 Scala 代码中使用 RunningStrategies 类来定义一组运行策略。要创建 RunningStrategies 的实例,我使用 apply 方法以及可变数量的
Scala 3 宏:如何使用 quoted.Type 获取通用类型的名称
我遇到了以下问题。我想在 scala 3 中将类型作为字符串表示形式获取。如果我使用以下内容,我会遇到类型擦除问题。 对象示例 1: @main def example1() = ...
以下引用3年多前的Macros: the Plan for Scala 3: 例如,可以定义一个宏注解 @json 来为一个类型添加一个 JSON 序列化器。 任何...
是否有一个简单的 Scala 3 示例来说明如何使用 `quoted.Type` 替代 `TypeTag`?
Martin Odersky 说 Scala 3 有 quoted 包,用 quoted.Expr 表示表达式,用 quoted.Type 表示类型。 quoted.Type 本质上取代了 TypeTag。它确实...
我正在研究 Scala 2.12.17。 假设我有一堆案例类: 案例类 TestOne(一:字符串) 案例类 TestTwo(一:字符串,二:字符串) 案例类 TestThree(一:字符串,二:字符串,th ...
我有以下代码: 对象宏{ 导入 scala.language.experimental.macros 导入 scala.reflect.macros.blackbox def hello(): Unit = macro hello_impl def hello_impl(c: blackbox.
向使用 Symbol.newMethod 定义的方法添加注释
Type scala.quoted.Quotes.reflectModule.SymbolMethods 有一个名为 annotations 的方法,它返回附加到输入符号的注释。 类型 scala.quoted.Quotes.reflectModule.SymbolModule 有 ...
考虑以下宏声明: def someMacro[Alg[_[_]]](c: 上下文)(隐式算法: c.WeakTypeTag[Alg[_]]) 不幸的是它没有编译。错误: _$2 没有类型参数,exp...
如何在 Scala 3 中访问未知枚举的方法 valueOf
我正在尝试创建内联 def 来为 Scala 3 中的任何枚举生成 Json 编解码器。为此,我需要访问枚举父级的 valueOf 方法。是这样的: 内联 def gen[T](u...
我试图在String的基础上创建一个HexString类型,这个类型应该满足 "它只包含十六进制数字 "的条件,我想让编译器为我进行typecheck,如果 ...
我们知道,用scala宏在一些方法中很容易创建一个内部类。但我想知道是否可以生成一个顶层类对象?如果答案是肯定的,那么如何避免 ...
例如,如下代码:对象测试扩展了App {特质类{val f1:Int} val c =新类{val f1:Int = 1 val f2:字符串=“ Class”} ...
我有两个班级,分别叫Foo和Fizz。 Foo使用一个称为expand的注释宏来为其某些方法创建别名(实际实现比创建别名要多一些,但是...
当使用编译时宏调用scala函数时,如何在导致编译错误时顺利进行故障转移?
假设我打算在scala程序中使用单例/文字类型功能,此功能在scala 2.12的无形状库中提供(scala 2.13支持本机文字类型,但让我们使用...
我正在编写一个Scala程序,我希望它可以与一个大库的两个版本一起使用。这个大库的版本2稍微更改了API(仅一个类构造函数签名具有额外的...
错误消息“值”只能在任务或设置宏中使用,例如:=,+ =,++ =,Def.task或Def.setting。 val x = version.value ^明确指示如何解决...