如果我有Seq('a -> 1, 'b -> "some text")
,我怎样才能调用一个函数f(a: Int, b: String)
,其中填充了来自Seq
的参数,并按名称(a,b)绑定?
答案 0 :(得分:0)
我相信你应该能够使用scala-reflect来做到这一点。像这样(未经测试):
def applyWithNamedParameters[T: ClassTag](obj: T, m: MethodSymbol, params: Map[String, Any]) {
val methodMirror = scala.universe.runtime.currentMirror.reflect(obj).reflectMethod(m)
val paramNames = m.paramss.flatten.map(_.name.toString)
val paramValues = paramNames.map(params)
methodMirror.apply(paramValues)
}
params
作为地图而不是Seq给出,以简化代码。