跟进这个问题,我试图弄清楚如何在对象上调用方法。相关定义如下:
trait ThirdParty { def invoke = println("right") }
trait WeatherIcon { def invoke = println("wrong") }
class MyClass {
object objA extends ThirdParty
object objB extends WeatherIcon
}
我有一个这样Symbol
的:objA
import reflect.runtime.universe._
val stuff = typeOf[MyClass].members.filter(_.isValue).filter(_.typeSignature <:< typeOf[ThirdParty])
这会返回一个Iterable
带有单个元素的 a,所以让我们说:
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)
问题是我无法弄清楚这条错误消息告诉我该怎么做!