-
-
Save debasishg/4720884 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
14:26 ~/Projects/210x (2.10.x)$ scala | |
Welcome to Scala version 2.10.1-20130204-105326-3d318be51f (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_37). | |
Type in expressions to have them evaluated. | |
Type :help for more information. | |
scala> case class Shop(store: String, item: String, cost: Int) { def this() = this(null, null, 0) } | |
defined class Shop | |
scala> val t = typeOf[Shop] | |
t: reflect.runtime.universe.Type = Shop | |
scala> val m = runtimeMirror(getClass.getClassLoader) | |
m: reflect.runtime.universe.Mirror = JavaMirror with scala.tools.nsc.interpreter.IMain$TranslatingClassLoader@1d87b360 of type class scala.tools.nsc.interpreter.IMain$TranslatingClassLoader with classpath [(memory)] and parent being scala.tools.nsc.util.ScalaClassLoader$URLClassLoader@381172c5 of type class scala.tools.nsc.util.ScalaClassLoader$URLClassLoader with classpath [file:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar,file:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/ui.jar,file:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jsse.jar,file:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jce.jar,file:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/charsets.jar,file:... | |
scala> val cls = t.typeSymbol.asClass | |
cls: reflect.runtime.universe.ClassSymbol = class Shop | |
scala> val cm = m.reflectClass(cls) | |
cm: reflect.runtime.universe.ClassMirror = class mirror for Shop (bound to null) | |
scala> val alts = t.declaration(nme.CONSTRUCTOR).asTerm.alternatives | |
alts: List[reflect.runtime.universe.Symbol] = List(constructor Shop, constructor Shop) | |
scala> val noargCtor = alts.collect{ case ms: MethodSymbol if ms.paramss == List(List()) => ms }.head | |
noargCtor: reflect.runtime.universe.MethodSymbol = constructor Shop | |
scala> cm.reflectConstructor(noargCtor)() | |
res0: Any = Shop(null,null,0) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment