我正在使用Scalacheck库来测试我的应用程序。在那个库中有一个Gen
对象,它定义了任何对象到该类对象的生成器的隐式转换。带有隐含的奇怪行为
例如,导入Gen._
可以呼叫的方法,如sample
任何物体上,通过其隐式转换到Gen
:
scala> import org.scalacheck.Gen._
import org.scalacheck.Gen._
scala> "foo" sample
res1: Option[java.lang.String] = Some(foo)
在这个例子中,隐式Gen.value()
施加到"foo"
,产生发电机,其始终返回Some(foo)
。
但是,这并不工作:
scala> import org.scalacheck.Gen.value
import org.scalacheck.Gen.value
scala> "foo" sample
<console>:5: error: value sample is not a member of java.lang.String
"foo" sample
^
为什么不呢?
更新
我使用Scala的2.7.7final和ScalaCheck 2.7.7-1.6。
更新
只需切换到斯卡拉2.8.0.final与ScalaCheck 2.8.0-1.7。问题确实消失了。
我正在使用Scala 2.7.7final和ScalaCheck 2.7.7-1.6。这是这些版本中的错误吗?我应该升级吗? – lindelof 2010-08-19 20:03:02
它可能是2.7.7的限制,但升级到2.8是一个很大的步骤,所以只有当你准备好了。 – 2010-08-21 23:52:22
@lindelof:2.7是死路一条,没有被维护。我强烈建议升级到2.8 ASAP。这不像你想象的那么重要。 – 2010-08-26 13:41:00