scala - How can I evaluate a lazy val using reflection? -


using experimental scala 2.10 reflection, when try call fieldmirror.get() on field lazy val, returns null. there way evaluate lazy val using reflection? get() function should no longer return null afterwards.

consider example:

case class person(val firstname: string,                   val lastname: string) {   lazy val name = firstname + " " + lastname }  import scala.reflect.runtime.{universe => ru}  val runtimemirror = ru.runtimemirror(getclass.getclassloader)  val fred = person("fred", "smith")  val instancemirror = runtimemirror.reflect(fred)  val nameterm = ru.typeof[person].declaration(ru.newtermname("name")).asterm  val namelazy = instancemirror.reflectfield(nameterm)  namelazy.get     >>> res8: = null  fred.name     >>> res9: string = fred smith  namelazy.get     >>> res10: = fred smith 

i discovered solution. there hidden method gets generated:

case class person(val firstname: string,               val lastname: string) {  lazy val name = firstname + " " + lastname }  import scala.reflect.runtime.{universe => ru}  val runtimemirror = ru.runtimemirror(getclass.getclassloader)  val fred = person("fred", "smith")  val instancemirror = runtimemirror.reflect(fred)  val namemethod = ru.typeof[person].member(ru.newtermname("name")).asmethod val namevalue = ru.typeof[person].member(ru.newtermname("name")).asterm  val namelazy = instancemirror.reflectfield(namevalue) val namelazymethod = instancemirror.reflectmethod(namemethod)  namelazy.get     >>> null  namelazymethod()     >>> res9: string = fred smith  namelazy.get     >>> res10: string = fred smith 

Comments

Popular posts from this blog

php - Why I am getting the Error "Commands out of sync; you can't run this command now" -

linux - Does gcc have any options to add version info in ELF binary file? -

java - Are there any classes that implement javax.persistence.Parameter<T>? -