Код ниже дает следующий результат:
as member: nested: AnyRef{def x: Int; def x_=(x$1: Int): Unit}
as local: nested: Object
(Протестировано с Scala 2.12.12 и Scala 2.12.3)
Может кто-нибудь объяснить, почему?
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()
}
.getClass
) с отражением Scala (остальное). Чистая версия Scaladef getNestedType[T: TypeTag](m: T) = { for { symbol <- typeOf[T].members ...
возвращаетAnyRef{def x: Int; def x_=(x$1: Int): Unit}
оба раза. - person Dmytro Mitin   schedule 26.10.2020def getNestedType[T: ClassTag](m: T) = { for { symbol <- currentMirror.reflect(m).symbol.info.members ...
снова показывает несоответствие:AnyRef{def x: Int; def x_=(x$1: Int): Unit}
vs.Object
. - person Dmytro Mitin   schedule 26.10.2020