2

クラス内の特定のオブジェクトの名前を知りたい

class B {
   abstract class F{
       def name = getClass.getSimpleName
   }
   object FI extends F
}

val b = new B
println(b.FI)

Scala 2.9.1では、B $FI$を出力します

Scala 2.9.2では、FI$を出力します

私が本当に欲しいのは「FI」です。FIを取得し、将来のバージョンのscalaで変更されないようにするための最良の方法は何ですか?私を助けるためにいくつかの反射サポートはありますか?

4

1 に答える 1

5

これは、次のように Scala 2.10 で導入された新しいリフレクション API で可能です。

scala> import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._

scala> val mirror = runtimeMirror(getClass.getClassLoader)
mirror: reflect.runtime.universe.Mirror = JavaMirror with scala.tools.nsc.interpreter.IMain$TranslatingClassLoader@609a5d54 of type class scala.tools.nsc.interpreter.IMain$TranslatingClassLoader with classpath <unknown>

scala> mirror.reflect(new B().FI).symbol.name
res24: reflect.runtime.universe.Name = FI
于 2012-06-22T16:02:24.910 に答える