【问题标题】:Can i fill function named parameters from seq in scala?我可以从scala中的seq填充函数命名参数吗?
【发布时间】:2015-04-28 06:24:02
【问题描述】:

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

【问题讨论】:

  • Seq 可能是 Seq('a -> 1, 'b -> "some text") 或 Seq('b -> "some text", 'a -> 1),所以 varargs和元组不是方法。来自帖子(我的理解):“但是,没有类似的 Scala 语法。”

标签: function scala parameter-passing sequence


【解决方案1】:

我相信你应该可以使用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 的形式给出以简化代码。

【讨论】:

    猜你喜欢
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-16
    • 1970-01-01
    相关资源
    最近更新 更多