问题
Code below produces following result:
as member: nested: AnyRef{def x: Int; def x_=(x$1: Int): Unit}
as local: nested: Object
(Tested with Scala 2.12.12 and Scala 2.12.3)
Can someone explain why?
object Main extends App {
def getNestedType(m: Any) = {
import scala.reflect.runtime.currentMirror
for {
symbol <- currentMirror.classSymbol(m.getClass).toType.members
if symbol.isTerm && !symbol.isMethod && !symbol.isModule
} yield {
s"{symbol.name.decodedName}: ${symbol.info}"
}
}
object obj {
var nested = new {
var x = 0
}
}
getNestedType(obj).foreach(x => println(s"as member: $x"))
def f(): Unit = {
object obj {
var nested = new {
var x = 0
}
}
getNestedType(obj).foreach(x => println(s"as local: $x"))
}
f()
}
来源:https://stackoverflow.com/questions/64526623/why-is-a-type-of-the-member-of-the-object-different-in-a-function