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

时间:2012-08-20 09:15:31

标签: scala scalacheck

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

我试过了:

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))

为什么这不起作用?我不知道为什么我会遇到重载方法错误。

1 个答案:

答案 0 :(得分:4)

def arbitraryFunction[Int]

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