In Scala, I can declare an object like so:
class Thing
object Thingy extends Thing
How would I get "Thingy"
(the name of the object) in Scala?
I've heard that Lift (the web framework for Scala) is capable of this.
Just get the class object and then its name.
scala> Thingy.getClass.getName
res1: java.lang.String = Thingy$
All that's left is to remove the $
.
EDIT:
To remove names of enclosing objects and the tailing $
it is sufficient to do
res1.split("\\$").last
If you declare it as a case object
rather than just an object
then it'll automatically extend the Product
trait and you can call the productPrefix
method to get the object's name:
scala> case object Thingy
defined module Thingy
scala> Thingy.productPrefix
res4: java.lang.String = Thingy
I don't know which way is the proper way, but this could be achieved by Scala reflection:
implicitly[TypeTag[Thingy.type]].tpe.termSymbol.name.toString
来源:https://stackoverflow.com/questions/12995250/in-scala-how-do-i-get-the-name-of-an-object-not-an-instance-of-a-class