gpt4 book ai didi

Scala 反射错误 : this is an inner module, 在 InstanceMirror 上使用reflectModule 来获取其 ModuleMirror

转载 作者:行者123 更新时间:2023-12-05 00:34:11 28 4
gpt4 key购买 nike

关注 this question ,我想弄清楚如何在对象上调用方法。相关定义如下:

trait ThirdParty { def invoke = println("right") }
trait WeatherIcon { def invoke = println("wrong") }
class MyClass {
object objA extends ThirdParty
object objB extends WeatherIcon
}

我收到了 SymbolobjA像这样:
import reflect.runtime.universe._

val stuff = typeOf[MyClass].members.filter(_.isValue).filter(_.typeSignature <:< typeOf[ThirdParty])

返回 Iterable有一个元素,所以让我们说:
val objASymbol = stuff.head.asModuleSymbol

然后我尝试了,基于 this other question , 这个:
val mirror = runtimeMirror(getClass.getClassLoader)
mirror.reflectModule(objASymbol)

这导致了该主题引用的错误消息:
java.lang.Error: this is an inner module, use reflectModule on an InstanceMirror to obtain its ModuleMirror
at scala.reflect.runtime.JavaMirrors$JavaMirror.reflectModule(JavaMirrors.scala:118)
at scala.reflect.runtime.JavaMirrors$JavaMirror.reflectModule(JavaMirrors.scala:60)

问题是我无法弄清楚此错误消息告诉我要做什么!

最佳答案

你需要写runtimeMirror.reflect(<instance of MyClass>).reflectModule(objASymbol) .普通的reflectModule 不会做,因为在objA 上有一些反射操作。 (例如获取它的实例)需要一个外部实例。

不幸的是,即使你写对了你的用例也不会工作,因为 M4 只支持静态对象:https://issues.scala-lang.org/browse/SI-5498 .我们将在 2.10.0-final 之前实现它。

关于Scala 反射错误 : this is an inner module, 在 InstanceMirror 上使用reflectModule 来获取其 ModuleMirror,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11084408/

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