Scala 为什么对象的成员类型在函数中不同?
下面的代码生成以下结果:Scala 为什么对象的成员类型在函数中不同?,scala,reflection,types,scala-reflect,Scala,Reflection,Types,Scala Reflect,下面的代码生成以下结果: 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.currentMir
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()
}
objectmain扩展应用程序{
def getNestedType(m:Any)={
导入scala.reflect.runtime.currentMirror
为了{
symbol println(s“作为成员:$x”))
def f():单位={
对象对象对象{
var嵌套=新{
变量x=0
}
}
getNestedType(obj).foreach(x=>println(s“as local:$x”))
}
f()
}
这件事可能是Java反射(.getClass
)与Scala反射(其余)的混合。纯Scala版本def getNestedType[T:TypeTag](m:T)={for{symbol尽管def getNestedType[T:ClassTag](m:T)={for{symbol连接的问题: