scala - 在 ScalaCheck 中生成任意线性函数?

标签 scala scalacheck

我试图在 ScalaCheck 中生成 f(x) = ax + b 形式的任意函数,其中 a 和 b 是任意整数。我该怎么做?

我尝试过:

def arbitraryFunction[Int] = Arbitrary { 
  for (
    a <- Arbitrary.arbInt.arbitrary;
    b <- Arbitrary.arbInt.arbitrary
  ) yield (new Function1[Int, Int] { def apply(x : Int): Int = a * x + b })
}

但我收到错误:

overloaded method value * with alternatives:
[error]   (x: Double)Double <and>
[error]   (x: Float)Float <and>
[error]   (x: Long)Long <and>
[error]   (x: scala.Int)scala.Int <and>
[error]   (x: Char)scala.Int <and>
[error]   (x: Short)scala.Int <and>
[error]   (x: Byte)scala.Int
[error]  cannot be applied to (Int(in method arbitraryFunction))

为什么这不起作用?我不确定为什么会出现重载方法错误。

最佳答案

def arbitraryFunction[Int]

这定义了一个带有名为Int的类型参数的函数。据我了解您的问题,您的函数不需要任何类型参数。编译器错误是由该类型标识符引起的,它掩盖了“正常”Int 标识符。只要删除它,您的代码就可以工作,除非它包含其他缺陷。

关于scala - 在 ScalaCheck 中生成任意线性函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12035017/

相关文章:

scala - 此递归列表展平如何工作?

java - 为什么当需要 java List 时,Buffer 却没有发生 JavaConversions._ ?

scala - Scala/Clojure 使用什么汇编器?

scala - 为什么我的 Scalacheck/Scalatest PropertyCheckConfig 被忽略了?

scala - 如何在ScalaTest中使用ScalaCheck的收集和分类?

scala - 在 ScalaCheck 中从语法生成字符串

Scala map 方法语法

google-app-engine - 将 scala 类添加到 DataNucleus 增强器 CLASSPATH

scalacheck - 当第二个参数的生成依赖于第一个参数时,如何编写带有两个参数的测试?

scala - 创建自定义任意生成器以测试来自 ScalaTest ScalaCheck 的 java 代码