延迟生成器对递归数据结构有意义。我想知道这个Prop.delay
可能有用的情况。你能否展示一个现实生活中的例子。
答案 0 :(得分:2)
我想知道这个Prop.delay在哪种情况下会有所帮助。 你能否展示一个现实生活中的例子。
假设您在Scalacheck中编写了基于属性的测试套件的扩展,并希望用户构建其属性,并且您的扩展需要属性,但不应立即执行它们。
实际上,Scalacheck在内部使用Prop.delay
构造属性,允许用户使用Properties
trait / superclass定义测试。
class BadExample extends Properties("Bad example") {
property("divide by 0") = {
Prop.forAllNoShrink { x: Int =>
x / 0 == 0 // No!
}
}
}
这会收集属性,以便它们可以由测试运行器(作为应用程序或通过sbt)执行
sealed class PropertySpecifier() {
def update(propName: String, p: => Prop) = {
props += ((name+"."+propName, Prop.delay(p)))
}
}
private val props = new scala.collection.mutable.ListBuffer[(String,Prop)]
lazy val property = new PropertySpecifier()