我一直在尝试尝试键入递归序列化任意对象的输入法。 我使用了映射类型,通用参数,递归类型(例如JSON类型),但没有任何运气): 这是我试图摆脱参数中的any的方法: export function serialize(data: any) { if (data === null) ...
提示:本站收集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)
我从您的示例代码片段中得出,您希望这些“方法”成为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
的很多机会。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.