有人可能会更多地关注下一段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 回答
你应该看看你的方法定义:
在这里你说这个方法需要可变数量的字符串,例如:
然后是第二种方法:
这也需要一个可变数量的字符串,它们打包成
Seq[String]
,所以adIds
实际上是Seq
,但是你的第一个方法ids
不需要Seq
,它需要N
字符串,这就是为什么ids(adIds: _*)
有效 .: _*
这称为splat operator,正在做的是将Seq
展开为N
字符串 .