2

延迟生成器可能对递归数据结构有意义。我想知道这在哪种情况下Prop.delay会有所帮助。能否请您演示一个现实生活中的例子。

4

1 回答 1

2

我想知道这个 Prop.delay 在哪种情况下会有所帮助。能否请您演示一个现实生活中的例子。

假设您正在 Scalacheck 中为基于属性的测试套件编写扩展,并希望用户构建他们的属性,而您的扩展需要属性但不应该立即执行它们。

实际上,Scalacheck 在Prop.delay内部使用构造属性来允许用户使用Propertiestrait/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()
于 2017-04-17T18:17:37.437 回答