0

次の例から始めましょう。

class Foo {
  override def toString = ???
}

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

Scala Reflection API (またはその他の方法) を使用して、実行時にクラスのインスタンスの名前を取得するにはどうすればよいですか? この情報を AST から取得する方法は?

同じ質問ですが、Java の場合: Java Reflection: How to get name of a variable?

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メソッドが変数の名前にアクセスできないだけでなく、メソッドが知る変数は実際には 1 つもありません。

于 2014-10-17T09:56:06.377 に答える