scala变量参数:_ *

前端之家收集整理的这篇文章主要介绍了scala变量参数:_ *前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有人可以带来更多关于 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,但无法找到:_ *方法.

有人可以解释一下吗?

谢谢

解决方法

你应该看看你的方法定义:

def ids(ids: String*)

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

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

然后是第二种方法

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

这也需要一个可变数量的字符串,它们打包成一个Seq [String],所以adIds实际上是一个Seq,但你的第一个方法id不带Seq,它需要N个字符串,这就是id(adIds:_) *)工作.

:_ *这被称为splat operator,正在做的是将Seq splat为N个字符串.

猜你在找的Scala相关文章