2016-06-17 23 views
2

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)" => ??? 
} 

???内のロジックは非常に厄介になっているようだ(その質問への回答に基づいて)記述する必要があります。私が必要位置と名前付きの両方のパラメータを扱うことができます。デフォルト値への単純なアクセスなどはありません。単純化する方法はありますか?

+0

は、これまでのところ、残念ながら何より良い方法はありません。 –

+0

パラメータの値を取得する必要がある場合は、次のようになります。 http://stackoverflow.com/a/42961043/3669757 – eje

答えて

1

まあ、これは限られたソリューションですが、

// 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)")) 
} 
関連する問題