使用Scala Reflection API运行时的实例名称



让我们从以下示例开始:

class Foo {
  override def toString = ???
}
val instanceName = new Foo()
println(instanceName) // Should print "instanceName"

使用ScalaReflectionneneneba API(或任何其他方法),如何在运行时获得类的实例名称?如何从AST获得这些信息?

同样的问题,但对于Java来说:Java反射:如何获得变量的名称?

对不起,这个问题真的没有意义。我会尽力解释原因。

想象一下,存在着合适的魔法,可以让toString随心所欲。现在让我们再添加几行:

class Foo {
  override def toString = ???
}
val instanceName = new Foo()
val larry = instanceName
val moe = larry
val curly = moe
println(instanceName.toString)

您希望打印什么--instanceName?拉里?莫?卷曲的所有这些标识符都绑定到同一个对象。当toString执行时,用于引用对象的变量就不见了——对象引用在this中,仅此而已

一个对象不知道哪些标识符(表示堆栈上甚至其他对象中的数据)引用了它。toString方法不仅不能访问变量的名称,而且实际上没有一个变量可以让它知道。

相关内容

  • 没有找到相关文章

最新更新