Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 定义一个简单的隐式任意_Unit Testing_Scala_Generator_Implicit_Scalacheck - Fatal编程技术网

Unit testing 定义一个简单的隐式任意

Unit testing 定义一个简单的隐式任意,unit-testing,scala,generator,implicit,scalacheck,Unit Testing,Scala,Generator,Implicit,Scalacheck,我有一个类型Foo,其构造函数接受Int。如何为Foo定义一个隐式任意,以便与scalacheck一起使用 implicit def arbFoo: Arbitrary[Foo] = ??? 我提出了以下解决方案,但对我的口味来说,它有点太“手动”和低级: val fooGen = for (i <- Gen.choose(Int.MinValue, Int.MaxValue)) yield new Foo(i) implicit def arbFoo: Arbitrary[Foo]

我有一个类型
Foo
,其构造函数接受
Int
。如何为
Foo
定义一个
隐式
任意
,以便与scalacheck一起使用

implicit def arbFoo: Arbitrary[Foo] = ???
我提出了以下解决方案,但对我的口味来说,它有点太“手动”和低级:

val fooGen = for (i <- Gen.choose(Int.MinValue, Int.MaxValue)) yield new Foo(i)

implicit def arbFoo: Arbitrary[Foo] = Arbitrary(fooGen)

但是我仍然觉得必须有一个稍微简单一点的方法。

好吧,你可以使用下划线符号,而不是定义整个
Foo
——创建函数为
(I:Int)=>newfoo(I))

这是因为Scala知道
Foo
采用
Int
,而
map
是在
Int
上映射的,所以不需要明确地说明所有内容

所以这稍微短一点:

implicit def arbFoo = Arbitrary(Gen.resultOf(new Foo(_)))

实际上,case类在Scala中作为函数处理,因此您可以编写得更简单:
implicit def arbFoo=arbital(Gen.resultOf(Foo))
class Foo(i: Int)

(1 to 3).map(new Foo(_))
implicit def arbFoo = Arbitrary(Gen.resultOf(new Foo(_)))