首页 文章

scala变量参数:_ *

提问于
浏览
4

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

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

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

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

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

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

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

有人可以解释一下吗?

谢谢

1 回答

  • 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 字符串 .

相关问题