Scalaでは、次のようにオブジェクトを宣言できます。
class Thing
object Thingy extends Thing
どうすれば"Thingy"
(オブジェクトの名前)Scalaで?
Lift(ScalaのWebフレームワーク)がこれに対応していると聞きました。
クラスオブジェクトを取得してから、その名前を取得するだけです。
scala> Thingy.getClass.getName
res1: Java.lang.String = Thingy$
残っているのは、$
を削除することだけです。
編集:
囲んでいるオブジェクトの名前と尾鉱を削除するには$
で十分です。
res1.split("\\$").last
単なるobject
ではなくcase object
として宣言すると、自動的に Product
trait が拡張され、productPrefix
オブジェクトの名前を取得するメソッド:
scala> case object Thingy
defined module Thingy
scala> Thingy.productPrefix
res4: Java.lang.String = Thingy
どちらの方法が適切かはわかりませんが、これはScala Reflection:
implicitly[TypeTag[Thingy.type]].tpe.termSymbol.name.toString