0

我有以下程序:(Scala 2.9.2,Java6)

object Forcomp {
  def main(args: Array[String]): Unit = {
    val xs = List(-1, 0, 1)
    val xss = for (a <- xs; b <- xs if a != 0 && b != 0) yield (a,b)
    println(xss)
  }
}

它会产生这个输出:List((-1,-1), (-1,1), (1,-1), (1,1)) 我本来希望它只过滤掉ab都是0 的值 - 不是所有的值都是0 0。ab

我可以通过将 if 子句更改为以下内容来获得我想要的行为:if (a,b) != (0,0)– 但是,我真的必须这样做吗?这是一个错误还是这是故意的行为?一方面,我对此感到惊讶。

4

1 回答 1

6

您拥有的过滤器的真值表是这样的:

 a==0  |  b==0 | (a!=0 && b!=0)
--------------------------------
  0    |   0   |      0
  0    |   1   |      0
  1    |   0   |      0
  1    |   1   |      1

而你说你想要的行为是:

 a==0  |  b==0 | !(a==0 && b==0)
--------------------------------
  0    |   0   |      0
  0    |   1   |      1
  1    |   0   |      1
  1    |   1   |      1
于 2012-12-08T18:41:40.373 回答