让我们从以下示例开始:
class Foo {
override def toString = ???
}
val instanceName = new Foo()
println(instanceName) // Should print "instanceName"
使用 Scala 反射 API(或任何其他方法),如何在运行时获取类实例的名称?如何从 AST 获取这些信息?
同样的问题,但对于 Java:Java 反射:如何获取变量的名称?
让我们从以下示例开始:
class Foo {
override def toString = ???
}
val instanceName = new Foo()
println(instanceName) // Should print "instanceName"
使用 Scala 反射 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
方法不仅无法访问变量的名称,而且实际上没有一个变量可供它了解。