0

让我们从以下示例开始:

class Foo {
  override def toString = ???
}

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

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

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

4

1 回答 1

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方法不仅无法访问变量的名称,而且实际上没有一个变量可供它了解。

于 2014-10-17T09:56:06.377 回答