scala - list.filter(!=) 编译,但没有按预期工作
问题描述
以下 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
,这不是您想要做的。
推荐阅读
- oracle - Oracle:显示不同的保持顺序
- node.js - AWS S3 ListBuckets 返回所有存储桶
- python - 使用函数将十进制转换为二进制
- python - 如何有效地更新 Keras 变量切片?
- angular - Angular Material Slider - 在不禁用滑块的情况下允许最小值
- flutter - 将错误显示为预期的“资产”是一个列表,但得到了 -assets/tulas1.jpg (字符串)。飘飘然
- javascript - 最大高度减小时最大高度转换不起作用
- ansible - 带有循环的 Ansible vmware_host_fact
- scala - Scala中泛型结构中的类型条件方法
- python - SparkSQL JDBC (PySpark) 到 Postgres - 创建表和使用 CTE