Sử dụng thử nghiệm Scala 2.10 phản ánh, khi tôi cố gắng gọi FieldMirror.get() trên một trường là một val lười biếng, nó trả về null. Có cách nào để đánh giá val lười biếng bằng cách sử dụng sự phản ánh? Hàm get() không còn trả về null sau đó.Làm thế nào tôi có thể đánh giá một val lười biếng bằng cách sử dụng sự phản ánh?
Hãy xem xét ví dụ sau:
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: Any = null
fred.name
>>> res9: String = Fred Smith
nameLazy.get
>>> res10: Any = Fred Smith
buộc đánh giá biểu thức lười biếng đó. tôi không biết chi tiết cụ thể trong scala. –
Tại thời điểm này, tôi chỉ có một tham chiếu đến val lười biếng - một FieldMirror - vì vậy tôi không thể đơn giản đánh giá nó. Hàm get() trả về biểu thức và sau đó tôi có thể dễ dàng đánh giá nó. – vertexshader