2

リフレクションを介してオブジェクトのメソッドを呼び出したいのですが、メソッドの各パラメーターは、その型を指定した値に設定する必要があります。より具体的には、Map[reflect.runtime.universe.Symbol,Any]whereSymbolはタイプです。たとえばListDoubleStringおよびAnyは使用するインスタンスです。

ここで、メソッドの各パラメーターについて、マップをクエリし、それに応じてパラメーターを設定します。

以前typeOf[T].members.collect ...は メソッド を取得してscala.reflect.MethodSymbolいましたが、正しい を取得する方法がわかりませんSymbol。の要素はmethod.paramssたとえば、 のタイプのものではありval aません。Symbola

4

1 に答える 1

3

method.paramssfor each 引数を含むリストのリスト (パラメーター リストごとに 1 つ) を提供しTermSymbolます。それぞれTermSymboltypeSignatureを返すメソッドがありType、これには、typeSymbol探しているシンボルを提供するメソッドがあります。

例えば:

scala> import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._

scala> class Foo { def foo(s: String, i: Int) = s * i }
defined class Foo

scala> val params = typeOf[Foo].member(newTermName("foo")).asMethod.paramss.head
params: List[reflect.runtime.universe.Symbol] = List(value s, value i)

scala> params.map(_.typeSignature.typeSymbol)
res0: List[reflect.runtime.universe.Symbol] = List(class String, class Int)

私はあなたが望むものだと思います。

于 2013-05-04T17:35:21.823 に答える