for expressions 过滤器不过滤任何东西

for expressions filter doesn't filter anything

这是一个 for comprehension(或 for expressions)意外地根本不起作用:过滤器没有效果

只是想减少两个随机整数的范围

请帮忙

import java.lang.Math.abs
import org.scalacheck._
import Arbitrary._

object Main extends App {
  lazy val minus2Int : Gen[Int] = for {
         int1 <- arbitrary[Int]
         if (abs(int1) < 2147483645)
      } yield int1
  println(minus2Int.sample)
  println(minus2Int.sample)
  println(minus2Int.sample)
}

书中提到:

如果匹配成功,模式中的变量将绑定到元素的相应部分,就像第 15 章中描述的那样。但是如果匹配失败,则不会抛出 MatchError。相反,该元素只是从迭代中丢弃。

您的代码正在尝试过滤 out 5 个值。在顶部,21474836462147483647 (Int.MaxValue),在底部,-2147483646-2147483647-2147483648 (Int.MinValue).那么为什么 -2147483648 (Int.MinValue) 一直出现?

因为没有Int+2147483648。由于 abs(-2147483648) 不能表示为正值,它实际上 returns 是负值,即相同的 Int.MinValue 值, 小于 2147483645 所以它 没有 过滤掉。