繁体   English   中英

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

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

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

鉴于该方法是一个可以在参数中使用大量参数的函数,我将如何在Scala中实现以下方法?

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

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

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

我从您的示例代码片段中得出,您希望这些“方法”成为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的很多机会。

1 如何键入任意对象或其任何键作为方法参数

我一直在尝试尝试键入递归序列化任意对象的输入法。 我使用了映射类型,通用参数,递归类型(例如JSON类型),但没有任何运气): 这是我试图摆脱参数中的any的方法: export function serialize(data: any) { if (data === null) ...

2 如何从列表中随机调用任何方法

对于web2py和python还是一个新手,在我的web2py应用程序中,我创建了此代码,该代码在python shell中很好用。 python模块:这些方法以用户输入方程式查询以获取答案的方式工作。 如果是加法,则method1可以实现,与调用其他方法执行不同代码的方法相同,例如 ...

3 为什么带有参数列表的方法不能接受像 List 这样的任何类型的列表作为 java 中的参数? [复制]

这个问题在这里已经有了答案: List<Dog> 是 List<Animal> 的子类吗? 为什么 Java 泛型不是隐式多 ...

6 如何声明我的方法接收任何类型的列表作为参数?

我有这种方法接收文本(texto)提示用户输入选项号和带有选项的ArrayList。 例如{创建条目,删除条目,退出} solicitarNumero处理选项号的请求并验证它。 现在,当我使用不同类的变量(Franquicia,Gerente,Sistema)调用此方法时,我必须 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM