У меня есть следующая программа: (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))
Я ожидал, что он отфильтрует только те значения, где a
и b
равны оба 0, а не все значения, где либо a
или b
равны 0.
Я могу получить желаемое поведение, изменив предложение if на это: if (a,b) != (0,0)
— однако, действительно ли мне это нужно? Это ошибка или это преднамеренное поведение? Меня, например, это удивило.
!(a==0 && b==0)
, чтобы получить желаемое поведение. - person Gareth   schedule 08.12.2012a != 0 || b != 0
, что в основном то же самое - person om-nom-nom   schedule 08.12.2012