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

时间:2014-10-17 09:14:54

标签: scala reflection scala-reflect

让我们从以下示例开始:

class Foo {
  override def toString = ???
}

val instanceName = new Foo()
println(instanceName) // Should print "instanceName"

使用Scala Reflection API(或任何其他方法),如何在运行时获取类实例的名称?如何从AST获取此信息?

相同的问题,但对于Java:Java Reflection: How to get the name of a variable?

1 个答案:

答案 0 :(得分:0)

对不起,这个问题没有意义。我会试着解释原因。

想象一下,存在合适的魔法,允许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方法不仅无法访问变量的名称,而且不是单个变量,因此无法知道。

相关问题