Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 为什么对象的成员类型在函数中不同?_Scala_Reflection_Types_Scala Reflect - Fatal编程技术网

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连接的问题: