【发布时间】:2016-12-18 20:29:50
【问题描述】:
我有以下 Scala 函数,
def isValid(xs: Array[Int]): Boolean = {
val List(x, y, z) = xs.sorted.toList
x + y > z
}
当我将输入类型更改为List[Double] 时,这仍然有效。我希望它能够与通用集合以及可以比较和添加的任何元素一起使用。
编辑:这是我目前拥有的更通用的。不幸的是,它要求我指定泛型参数。
def isValid[N, S <% Seq[N]](xs: S)(implicit n: Numeric[N]): Boolean = {
val Seq(x, y, z) = xs.sorted
n.gt(n.plus(x, y), z)
}
// Ideally, I wouldn't have to specify the generic parameters.
listOfArray.filter(isValid[Int, Array[Int]])
listOfList.filter(isValid[Double, List[Double]])
【问题讨论】:
-
“使用通用集合”是什么意思?
Array[T]是一个通用集合。 -
@YuvalItzchakov,我的意思是我想对容器本身进行参数化,而不仅仅是容器的元素,例如如果可能的话,我希望它可以与
Array和List以及其他容器一起使用。