Scala:可选的参数序列
以下是一些数据:Scala:可选的参数序列,scala,scala-option,Scala,Scala Option,以下是一些数据: val data = List(1,1,2,2,3) 我想编写一个函数filteredSum,它支持以下内容: /*1*/ filteredSum(data) // Outputs 0 /*2*/ filteredSum(data, 1) // Outputs 1 + 1 = 2 /*3*/ filteredSum(data, 1, 3) // Outputs 1 + 1 + 3 = 5 /*4*/ filteredSum(data, None) // Outputs 1 +
val data = List(1,1,2,2,3)
我想编写一个函数filteredSum
,它支持以下内容:
/*1*/ filteredSum(data) // Outputs 0
/*2*/ filteredSum(data, 1) // Outputs 1 + 1 = 2
/*3*/ filteredSum(data, 1, 3) // Outputs 1 + 1 + 3 = 5
/*4*/ filteredSum(data, None) // Outputs 1 + 1 + 2 + 2 + 3 = 9
有几次险些失手;例如,*
表示法支持前三个调用:
def filteredSum(data: Seq[Int], filterValues: Int*): Int = {
data.intersect(filterValues).sum
}
选项为您提供了第四个选项:
def filteredSum(data: Seq[Int], filterValues: Option[Seq[Int]]) : Int = {
if(filterValues.nonempty) data.intersect(filterValues.get).sum
else data.sum
}
但是在这个实现中,前三个调用看起来更笨拙:filteredSum(数据,有些(Seq(1)))
还有其他想法吗?(很明显,我的实际用例比简单地将一些数字相加要复杂得多,所以我不想寻找与相交
或求和
函数联系太紧密的答案。)生成两个函数:
def filteredSum(data: Seq[Int], filterValues: Int*): Int =
data.filter(filterValues.toSet).sum
def filteredSum(data: Seq[Int], all: Boolean) : Int =
if(all) data.sum else 0
这听起来很愚蠢,但我忘了你能做到。太多的Python。。。