有人可以带来更多关于
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个字符串.