以下 Scala 代码可以编译,但没有按照我的预期执行:
scala> List((1,1),(1,2)).filter(!=)
res1: List[(Int, Int)] = List((1,1), (1,2))
Run Code Online (Sandbox Code Playgroud)
!=上面的代码指的是什么?
我知道我可以正确地将谓词写为
scala> List((1,1),(1,2)).filter { case (a, b) => a != b }
res1: List[(Int, Int)] = List((1,2))
Run Code Online (Sandbox Code Playgroud)
但我很好奇第一个表达式实际上做了什么。
Scala 编译器执行以下扩展(您可以在运行带有-Xprint:typer标志的scalac 时自己看到这一点):
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)));
Run Code Online (Sandbox Code Playgroud)
这意味着它试图与this您的元组进行比较Any,这不是您想要做的。
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |