下面的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))
但我很好奇第一个表达式的实际作用。
Scala编译器进行以下扩展(使用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
不是提升到的元组Any
,这不是您要尝试的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句