为什么 Scala 没有 withFilterNot?

Why does Scala not have withFilterNot?

在像 Seq 这样的 Scala 集合中,我们有方法 filter,为了方便起见,还有 filterNot。后者允许我们编写例如

seq.filterNot(someSet.contains)

而不是不太优雅的

seq.filter(e => !someSet.contains(e))

除了这些方法之外,我们还有 WithFilter class 可以懒惰地评估过滤条件。方便的是,用法与 filter:

相同
seq.withFilter(e => !someSet.contains(e))

我的问题是:为什么我们没有这样的 withFilterNot

seq.withFilterNot(someSet.contains)

更具体地说:它只是 Scala 开发人员认为 unnecessary/low 优先考虑的功能,还是有技术原因?

你可以写得更短:seq.filterNot(someSet)

至于.withFilterNot,如果觉得重要的可以自己轻松添加:

object PimpSyntax {
   implicit class PimpedSeq[T](val seq: Seq[T]) extends AnyVal {
      def withFilterNot(filter: T => Boolean) = seq.withFilter(!f(_))
   }
}

现在,只要import PimpSyntax._,你可以随心所欲地写seq.withFilterNot(someSet)之类的东西。

或者,甚至更好:

 object PimpSyntax {
     implicit class Negator[T](val f: T => Boolean) extends AnyVal {
        def unary_!: T => Boolean = !f(_)
     }
 }

有了这个,你不仅可以做seq.withFilter(!someSet),还可以做seq.partition(!someSet)seq.find(!someSet)seq.dropWhile(!someSet)