将列表元素作为可变参数传递给函数

31

我有一个名为or的函数,例如,它被定义为:

or(filters: FilterDefinition*)

然后我有一个列表:

List(X, Y, Z)

我现在需要做的是像这样调用or

or(func(X), func(Y), func(Z))

正如预期的那样,列表的长度可能会发生变化。

在Scala中,最佳方法是什么?


3
虽然不是完全相同的问题,但它提供了“_*”符号,这是答案的关键(假设您可以只使用“list.map(func)”!):https://dev59.com/9XNA5IYBdhLWcg3wVcFx - Rex Kerr
如果我们将整个列表元素传递并在被调用的函数中处理所有元素,那么只需将列表传递到函数中,函数可以迭代元素,而无需使用特殊语法“:_*”,对吗?或者我可能错了,这种用法有什么好处吗? - user3366706
@user3366706 这确实是更传统的做法。对我来说,当处理期望函数参数为生成查询的DSL时,这非常方便 - 其中包含可变数量的参数。 - Ashesh
1个回答

69

看看这个例子,我将定义一个函数printme,它接受类型为String的可变参数

def printme(s: String*) = s.foreach(println)


scala> printme(List("a","b","c"))

<console>:9: error: type mismatch;
 found   : List[String]
 required: String
              printme(List(a,b,c))

你真正需要使用 :_* 运算符将列表解包为参数

scala> val mylist = List("1","2","3")
scala> printme(mylist:_*)
1
2
3

1
它也适用于类:case class ExampleClass (d: Double*) - Francesco Gusmeroli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接