8

私の仕事は、デフォルト値があるケースクラスのパラメーターの名前を見つけることです。

2.9 では、scalap から ScalaSigParser を使用しており、次のようなことを行いました。

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

2.10 でのリフレクションによって、この種の情報に簡単にアクセスできるようになることを期待していました。

最終的には、そのケース クラスのシリアル化/逆シリアル化のコードを自動的に作成する、ケース クラスのコンパニオン オブジェクトに含めるマクロを書きたいと思います。そのためには、どのパラメーターにデフォルト値があるかを知る必要があります。

4

1 に答える 1

3

現在それを行う方法はありませんがTermSymbol.isDefaultParam、要求された機能を公開する を追加するプル リクエスト (https://github.com/scala/scala/pull/1047) を送信しました。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 に答える