gpt4 book ai didi

scala - 如何在 Scala 中通过对象的全名获取对对象的引用?

转载 作者:行者123 更新时间:2023-12-02 00:11:32 25 4
gpt4 key购买 nike

假设我们有

package MyApp.foo

object Bar {
def apply(x: Int) = x + 1
}

如何使用其全名(“MyApp.foo.Bar”)字符串通过此对象增加一个值?

这个功能帮助我在 C# 中高效地解决了一个任务,而我在 Scala 中怀念它。

最佳答案

我假设你想要反射(reflection)。有 Java 反射,这是 Scala 2.9.x 之前唯一可用的反射,还有 Scala 反射,从 2.10.0 开始可用。我将只解释后者 - 查找前者的 Java 反射。

这相当长,但您可以在别处查找 Scala 反射,或阅读 the docs here .或者,使用 SMirror ,它是 Scala 反射的包装器,提供了更高的层次。

import scala.reflect.runtime.universe._
val m = runtimeMirror(getClass.getClassLoader)
val barSymbol = m staticModule "MyApp.foo.Bar"
val barType = barSymbol.typeSignature
val applySymbol = (barType declaration TermName("apply")).asMethod
val barMirror = m reflectModule barSymbol
val barInstance = barMirror.instance
val barInstanceMirror = m reflect barMirror.instance
val applyMirror = barInstanceMirror reflectMethod applySymbol
def increase(n: Int) = applyMirror.apply(n) match {
case x: Int => Some(x)
case _ => None
}

关于scala - 如何在 Scala 中通过对象的全名获取对对象的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15048600/

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