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。。。