怎么了?为什么人是空的?
import org.scalacheck.{Arbitrary, Properties, Gen, Prop}
import Gen._
import Prop._
case class Person(name: String) {}
object QuickCheckPerson extends Properties("Person") {
property("gen1") = forAll { (person: Person) =>
println("person: " + person)
person.name == "john" // nullPointerException, because person == null
}
val john = Person("john")
implicit lazy val arbPerson: Arbitrary[Person] = Arbitrary(value(john))
}
QuickCheckPerson.check
它因 NullPointerException 而失败。
但是,如果我val john = Person("john")在property("gen1") = ....
为什么??
更新
如果我声明val johnas ,则该示例有效lazy。所以,似乎在lazy val arbPerson之前执行val john,但如果是这样,scala 编译器应该会失败,说john没有定义。john是 a val,也不是 a var,所以要么声明并实例化它,要么不声明。
对此有任何想法吗?
ps:斯卡拉2.10.3