scala变量参数:_ *

时间:2015-06-02 08:20:24

标签: scala scala-collections

有人可能会更多关注以下scala代码,这对我来说并不完全清楚吗?我有以下功能定义

  def ids(ids: String*) = {
    _builder.ids(ids: _*)
    this
  }

然后我尝试将变量参数列表传递给此函数,如下所示:

def searchIds(kind: KindOfThing, adIds:String*) = {
...
ids(adIds)
}

首先,ids(adIds)段不起作用,这有点奇怪,因为错误消息说:类型不匹配,预期:字符串,实际:Seq [String]。这意味着变量参数列表不会被输入为集合或序列。

为了解决这个问题,请使用技巧ids(adIds: _*)

我不是100%肯定如何:_ *有效,有人可以放一些棚子吗? 如果我没记错的话:意味着操作应用于右参数而不是左,_表示“应用”传递元素,... 我检查了字符串和序列scaladoc,但无法找到:_ *方法。

有人可以解释一下吗?

THX

1 个答案:

答案 0 :(得分:7)

您应该查看您的方法定义:

def ids(ids: String*)

这里你说这个方法需要可变数量的字符串,例如:

def ids(id1: String, id2: String, id3: String, ...)

然后是第二种方法:

def searchIds(kind: KindOfThing, adIds:String*)

这也需要一个可变数量的字符串,这些字符串打包成Seq[String],因此adIds实际上是Seq,但您的第一个方法ids不会取一个Seq,需要N个字符串,这就是ids(adIds: _*)有效的原因。

: _*这称为splat operator,正在做的是Seq展开N字符串。