让我们从以下示例开始:
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?
答案 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
方法不仅无法访问变量的名称,而且不是单个变量,因此无法知道。