gpt4 book ai didi

scala - ScalaCheck 中的这种用法

转载 作者:行者123 更新时间:2023-12-01 08:28:08 25 4
gpt4 key购买 nike

我正在通过阅读 ScalaCheck 的代码来学习 Scala,并发现许多组合器的后缀是 suchThat .然而,在很多情况下,这样的事情看起来并不是很有必要。我想知道为什么它们是这样设计的。这是摘自 GitHub 的一些内容:

Example 1.

/** Picks a random value from a list */
def oneOf[T](xs: Seq[T]): Gen[T] =
choose(0, xs.size-1).map(xs(_)).suchThat(xs.contains)
map从 xs 中选取一个元素,因此 xs.contains似乎多余。

——
Example 2.

def containerOfN[C[_],T](n: Int, g: Gen[T])
(implicit evb: Buildable[T,C], evt: C[T] => Traversable[T]): Gen[C[T]] =
sequence[C,T](Traversable.fill(n)(g)) suchThat { c =>
c.size == n && c.forall(g.sieveCopy)
}

为什么是 c.size == n需要,鉴于成功 sequence将返回 n 的长度?

——
Example 3.

/** Generates a string of alpha characters */
def alphaStr: Gen[String] =
listOf(alphaChar).map(_.mkString).suchThat(_.forall(_.isLetter))

生成的字符串将由 alphaChar 的列表组成这是从大写和小写字母中选择的。为什么我们需要一个 suchThat再次检查isLetter?

——

最佳答案

https://github.com/rickynils/scalacheck/commit/2d92eb61a89a8ec2e16d0af8599f9baafc9b5418

基本上,这是 ScalaCheck 测试用例简化所需要的,以了解生成的值最初具有的界限。

关于scala - ScalaCheck 中的这种用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24301666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com