【问题标题】:Instance name at runtime with the Scala Reflection API使用 Scala 反射 API 运行时的实例名称
【发布时间】:2014-10-17 17:56:06
【问题描述】:
让我们从下面的例子开始:
class Foo {
override def toString = ???
}
val instanceName = new Foo()
println(instanceName) // Should print "instanceName"
使用 Scala 反射 API(或任何其他方法),如何在运行时获取类实例的名称?如何从 AST 获取这些信息?
同样的问题,但对于 Java:Java Reflection: How to get the name of a variable?
【问题讨论】:
标签:
scala
reflection
scala-reflect
【解决方案1】:
对不起,这个问题没有任何意义。我会尝试解释原因。
想象一下,存在可以让 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 方法不仅无法访问变量的名称,而且确实没有单个变量可供它了解。