如何使用 Any* 的参数列表将任意方法调用为 Any 类型?

How to call arbitrary method as Any type with argument list of Any*?

假设 method 是一个函数,可以在 arguments 中获取参数数量,我将如何在 Scala 中实现以下方法?

def applyAny(method: Any, arguments: Any*) = ???

我的预期用途是与 scala.Dynamic 结合使用,例如:

val dynamicValue: Dynamic
dynamicValue.myAdd = (x,y) = > x + y
dynamicValue.myAdd(2,3)

我从您的示例片段中了解到,您希望这些 "methods" 成为 23 种 FunctionN 类型之一。

在那种情况下,除了对上述 23 种类型使用运行时分派外,您无能为力:

def applyAny(method: Any, arguments: Any*): Any = (arguments.size, method) match {
  case (0, f: Function0[_]) =>
    f()
  case (1, f: Function1[_, _]) =>
    f.asInstanceOf[Function1[Any, Any]](arguments(0))
  case (2, f: Function2[_, _, _]) =>
    f.asInstanceOf[Function2[Any, Any, Any]](arguments(0), arguments(1))
  ...
  case (22, f: Function22[_, _, ..., _]) =>
    f.asInstanceOf[Function22[Any, Any, ..., Any]](arguments(0), arguments(1), ..., arguments(21))
  case _ =>
    sys.error("Arity mismatch")
}

不漂亮,ClassCastException在各个地方的运行时有很多机会。