2016-07-29 56 views
1

的情况下类参数值我有一个案例类与250个字段:如何产生阶

case class Data(field1:String, field2:Int, ..) 

是否有使用Scala的检查,以生成值的参数

不相干的问题的方式我“VE看着:
How to generate case objects for every field in a Scala case class using macro?
Dynamically generate case class in Scala
Create an Arbitrary instance for a case class that holds a `Numeric` in ScalaCheck?

+0

您可以使用无形库中的'Generic'方法将'HList'转换为case类实例。这里有一个例子:https://github.com/milessabin/shapeless/blob/master/examples/src/main/scala/shapeless/examples/csv.scala。 – devkat

回答

3

使用scalacheck-shapeless

import org.scalacheck.Shapeless._ 
import org.scalacheck.Arbitrary._ 

implicitly[Arbitrary[Data]] 

上面的代码中执行以下操作:

  • 召唤一个shapeless.Generic[Data]通过隐宏案例类能把你变成一个shapeless.HList
  • 递归获得所有Arbitrary[String]Arbitrary[Int]等对于每个字段
  • 将所有这些组装成新的Arbitrary[Data]实例