Jar*_*zga 8 reflection macros scala
我的任务是找到案例类的参数名称,其中有默认值.
在2.9我从scalap使用ScalaSigParser并做了类似的事情:
(...)
case x: MethodSymbol if x.name.startsWith("init$default$") => (...)
(...)
Run Code Online (Sandbox Code Playgroud)
我希望2.10中的反思会让我更容易获得这种信息.
最后我想编写一个宏,我将在case类的伴随对象中包含它,它将自动创建一个用于该case类的序列化/反序列化的代码.为此,我需要知道哪些参数具有默认值.
目前无法做到这一点,但是我刚刚提交了一个拉取请求(https://github.com/scala/scala/pull/1047),该请求添加了TermSymbol.isDefaultParam
,它公开了请求的功能。我希望它能进入 RC1 和 2.10.0-final。
scala> case class C(x: Int, y: Int = 2)
defined class C
scala> val ctor = typeOf[C].declaration(nme.CONSTRUCTOR).asMethod
ctor @ 39fe9830: reflect.runtime.universe.MethodSymbol = constructor C
scala> ctor.params.flatten filter (_.asTerm.isDefaultParam)
res0 @ 7ad2093b: List[reflect.runtime.universe.Symbol] = List(value y)
Run Code Online (Sandbox Code Playgroud)