Scala 带有默认参数的宏注释

Scala 带有默认参数的宏注释,scala,scala-macros,scala-macro-paradise,Scala,Scala Macros,Scala Macro Paradise,说明如何从宏注释获取参数。但是,如果我有几个默认值的参数: class Foo(b: Boolean = false, i: Int = 0) extends StaticAnnotation { ... } 我需要写(基于对那个问题的回答) ?中的逻辑似乎变得非常糟糕:我需要处理位置参数和命名参数,无法简单访问默认值等。有没有办法简化它?好吧,这是一个有限的解决方案,但是 // same constructor parameters and defaults as Foo class Foo

说明如何从宏注释获取参数。但是,如果我有几个默认值的参数:

class Foo(b: Boolean = false, i: Int = 0) extends StaticAnnotation { ... }
我需要写(基于对那个问题的回答)


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

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

// 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)"))
}

不幸的是,到目前为止还没有更好的方法。如果您需要获取参数的值,则此方法有效:
// 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)"))
}