gpt4 book ai didi

scala - 通过反射获取 `Symbol`s的方法参数

转载 作者:行者123 更新时间:2023-12-04 04:59:01 25 4
gpt4 key购买 nike

我想通过反射调用对象上的方法,该方法的每个参数都应设置为指定其类型的值。更具体地说:我有一个 Map[reflect.runtime.universe.Symbol,Any]哪里Symbol是一种类型,例如List , Double , StringAny是要使用的实例。

现在,对于方法的每个参数,我想查询 map 并相应地设置参数。

我用过 typeOf[T].members.collect ...获取方法scala.reflect.MethodSymbol ,但我不知道如何获得正确的 Symbol . method.paramss中的元素例如 val a但不是 Symbol a 类型的.

最佳答案

method.paramss为您提供包含 TermSymbol 的列表列表(每个参数列表一个)对于每个参数。每个TermSymbol有一个 typeSignature返回 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)

我认为这就是你想要的。

关于scala - 通过反射获取 `Symbol`s的方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16376977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com