8

我的任务是查找有默认值的案例类的参数名称。

在 2.9 中,我使用来自 scalap 的 ScalaSigParser 并做了类似的事情:

(...)
case x: MethodSymbol if x.name.startsWith("init$default$") => (...)
(...)

我希望 2.10 中的反射能让我更轻松地访问此类信息。

最终我想编写一个宏,我将包含在案例类的伴随对象中,它将自动创建一个用于该案例类的序列化/反序列化的代码。为此,我需要知道哪些参数具有默认值。

4

1 回答 1

3

目前没有办法做到这一点,但是我刚刚提交了一个添加请求(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)
于 2012-08-04T08:37:18.750 回答