list.filter(!=)编译,但无法按预期工作

时间:2019-12-30 16:45:18

标签: scala

以下Scala代码可以编译,但没有达到我的期望:

scala> List((1,1),(1,2)).filter(!=)
res1: List[(Int, Int)] = List((1,1), (1,2))

以上代码中!=指的是什么?

我知道我可以正确地将谓词写为

scala> List((1,1),(1,2)).filter { case (a, b) => a != b }
res1: List[(Int, Int)] = List((1,2))

但我很好奇第一个表达式的实际作用。

1 个答案:

答案 0 :(得分:8)

Scala编译器进行以下扩展(使用amount标志运行scalac时,您可以自己看到):

-Xprint:typer

这意味着它试图再次比较List.apply[(Int, Int)] (scala.Tuple2.apply[Int, Int](1, 1), scala.Tuple2.apply[Int, Int](1, 2)) .filter(((x$1: Any) => this.!=(x$1))); 而不是将您的元组提升为this,这不是您要尝试的操作。