我可以从scala中的seq填充函数命名参数吗?

时间:2015-04-28 06:24:03

标签: function scala parameter-passing sequence

如果我有Seq('a -> 1, 'b -> "some text"),我怎样才能调用一个函数f(a: Int, b: String),其中填充了来自Seq的参数,并按名称(a,b)绑定?

1 个答案:

答案 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给出,以简化代码。