如何使Scalacheck arbString只生成可读字符串?

如何使Scalacheck arbString只生成可读字符串?,scala,scalacheck,Scala,Scalacheck,Postgres不接受Scalacheck arbString生成的所有类型的符号。有没有一种方法可以使用Scalacheck生成人类可读的字符串?您可以通过添加一个case类ReadableChar(c:Char),并为其定义一个任意的实例来实现。也许像 case class ReadableChar(c: Char) implicit val arbReadable: Arbitrary[ReadableChar] = Arbitrary { val legalChars = Range

Postgres不接受Scalacheck arbString生成的所有类型的符号。有没有一种方法可以使用Scalacheck生成人类可读的字符串?

您可以通过添加一个case类
ReadableChar(c:Char)
,并为其定义一个任意的实例来实现。也许像

case class ReadableChar(c: Char)
implicit val arbReadable: Arbitrary[ReadableChar] = Arbitrary {
  val legalChars = Range('a', 'z').map(_.toChar)
  for {
    c <- Gen.oneOf(legalChars)
  } yield ReadableChar(c)
}
case类ReadableChar(c:Char)
隐式值arbableable:arbitral[ReadableChar]=arbitral{
val legalChars=范围('a','z').map(uu.toChar)
为了{
c如果您查看一下,您可以看到一些生成器,包括
alphaChar
identifier

scala> import org.scalacheck.Gen._
import org.scalacheck.Gen._

scala> identifier.sample
res0: Option[String] = Some(vxlgvihQeknhe4PolpsJas1s0gx3dmci7z9i2pkYlxhO2vdrkqpspcaUmzrxnnb)

scala> alphaChar.sample
res1: Option[Char] = Some(f)

scala> listOf(alphaChar).sample
res2: Option[List[Char]] = Some(List(g, n, x, Y, h, a, c, e, a, j, B, d, m, a, r, r, Z, a, z, G, e, i, i, v, n, Z, x, z, t))

scala> listOf(alphaChar).map(_.mkString).sample
res3: Option[String] = Some(oupwJfqmmqebcsqbtRxzmgnJvdjzskywZiwsqnkzXttLqydbaahsfrjqdyyHhdaNpinvnxinhxhjyzvehKmbuejaeozytjyoyvb)

谢谢你!正是我想要的!