0

以下函数或多或少地接受任何集合并将其返回过滤:

def filterEven[Repr](o: collection.IterableLike[Int, Repr]): Repr = {
  o.filter { o =>
    (o % 2) == 0
  }
}

filterEven(List(1, 2, 3))

filterEven(Set(1, 2, 3))

如何使用 Scala 2.13 实现相同的目标?IterableLike那里不再存在。我应该以某种方式使用更高种类的类型吗?

4

1 回答 1

1

似乎IterableOps可以使用更高种类的类型来实现这一点:

def filterEven[CC[Int] <: IterableOps[Int, CC, CC[Int]]](o: CC[Int]): CC[Int] = {
  o.filter { o =>
    (o % 2) == 0
  }
}

我发现这比以前Repr的解决方案更合乎逻辑。

灵感来自将 scala 2.13 中的自定义集合操作添加到特定类型的任意集合

于 2021-08-10T16:12:47.183 回答