【问题标题】:Passing elements of a List as parameters to a function with variable arguments将 List 的元素作为参数传递给具有可变参数的函数
【发布时间】:2017-06-17 05:16:35
【问题描述】:

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

or(filters: FilterDefinition*)

然后我有一个列表:

List(X, Y, Z)

我现在需要做的就是给or点赞

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

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

在 Scala 中最好的方法是什么?

【问题讨论】:

  • 不是完全相同的问题,但它给出了: _* 符号,这是答案的关键(假设你可以list.map(func)!):stackoverflow.com/questions/1008783
  • 如果我们传递整个列表元素并在被调用函数中处理所有这些元素,那么也可以通过将列表传递给函数并且函数可以遍历元素来完成,而无需需要特殊语法 :_* ,对吗?或者我可能错了,这种用法有什么好的理由吗?
  • @user3366706 这将是更传统的做事方法,是的。对我来说,这在处理期望生成的查询作为函数参数的 DSL 时非常方便 - 参数数量可变。

标签: function scala


【解决方案1】:

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

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

【讨论】:

  • 它也适用于类:case class ExampleClass (d: Double*)
猜你喜欢
  • 1970-01-01
  • 2014-03-08
  • 2012-09-14
  • 2015-09-22
  • 2017-10-01
  • 1970-01-01
  • 2019-08-05
  • 1970-01-01
  • 2013-01-20
相关资源
最近更新 更多