【问题标题】: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 方法不仅无法访问变量的名称,而且确实没有单个变量可供它了解。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-22
      • 1970-01-01
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      相关资源
      最近更新 更多