Jea*_*let 15 scala lazy-evaluation
例如,在一个toString方法中,我想提供关于是否已经评估了类的惰性val成员的信息,如果是,则打印其值.这可能吗?
Pet*_*itz 14
据我所知,你不能.但你可以帮忙:
class A {
var isMemberSet = false
lazy val member = { isMemberSet = true; 8 }
}
val a = new A
a.isMemberSet // false
a.member // 8
a.isMemberSet // true
Run Code Online (Sandbox Code Playgroud)
当然,必须调整可见性和访问修饰符.
小智 8
如果要直接访问编译器生成的字段,请尝试以下代码.
import java.lang.reflect._
class A {
lazy val member = 42
def isEvaluated =
(1 & getClass.getField("bitmap$0").get(this).asInstanceOf[Int]) == 1
}
val a = new A
println(a.isEvaluated) // => true
println(a.member)
println(a.isEvaluated) // => false
Run Code Online (Sandbox Code Playgroud)