gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 11:28:10 24 4
gpt4 key购买 nike

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

class Foo(b: Boolean = false, i: Int = 0) extends StaticAnnotation { ... }

我需要写(根据那个问题的答案)

val (b, i) = c.prefix.tree match {
case q"new Foo(..$args)" => ???
}

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

最佳答案

嗯,这是一个有限的解决方案,但是

// same constructor parameters and defaults as Foo
class FooArgs(b: Boolean = false, i: Int = 0)

val args = c.prefix.tree match {
case q"new Foo(...$args)" => c.eval(c.Expr[FooArgs](q"new some_package.FooArgs(...$args)"))
}

关于scala - 带有默认参数的宏注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37891855/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com