gpt4 book ai didi

scala - 使用新的Scala反射API的“动态”方法调用

转载 作者:行者123 更新时间:2023-12-03 13:29:39 29 4
gpt4 key购买 nike

在过去,当实验实用程序Invocation是标准库的一部分时,可以“动态”调用方法,如下所示:

"Hello!" o 'substring(0, 4)  // to get Any back
"Hello!" oo 'substring(0, 4) // for an automatic unsafe cast to expected type


如何使用新的Scala反射API做到这一点?

最佳答案

Welcome to Scala version 2.10.0-20120617-072418-9a28ee1ffc (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_33).
Type in expressions to have them evaluated.
Type :help for more information.

scala> class Foo { def bar(x: Int) = x }
defined class Foo

scala> val foo = new Foo
foo @ 5935b50c: Foo = Foo@5935b50c

scala> runtimeMirror(getClass.getClassLoader).reflect(foo)
res0 @ 65c24701: reflect.runtime.universe.InstanceMirror = scala.reflect.runtime.JavaMirrors$JavaMirror$JavaInstanceMirror@65c24701

scala> res0.symbol.typeSignature.member(newTermName("bar"))
res1 @ 69624a1c: reflect.runtime.universe.Symbol = method bar

scala> res0.reflectMethod(res1.asMethodSymbol)(42)
res2 @ 4ac1d188: Any = 42


可以在以下位置找到有关API设计方式的一些背景信息: Get companion object instance with new Scala reflection API

关于scala - 使用新的Scala反射API的“动态”方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11062166/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com