scala 变量参数 :_*
scala variable arguments :_*
有人可以在我不完全清楚的以下一段 Scala 代码中引入更多的 shed 吗?我定义了以下函数
def ids(ids: String*) = {
_builder.ids(ids: _*)
this
}
然后我尝试将可变参数列表传递给此函数,如下所示:
def searchIds(kind: KindOfThing, adIds:String*) = {
...
ids(adIds)
}
首先,ids(adIds)
部分不起作用,起初有点奇怪,因为错误消息说:类型不匹配,预期:String,实际:Seq[String]。这意味着变量参数列表不会被类型化为集合或序列。
为了解决这个问题,请使用技巧 ids(adIds: _*)
。
我不是 100% 确定 :_* 是如何工作的,有人可以在上面放一些棚子吗?
如果我没记错的话 : 表示操作应用于右参数而不是左参数,_ 表示 "apply" 传递给元素,...
我检查了 String 和 Sequence scaladoc 但找不到 :_* 方法。
有人可以解释一下吗?
感谢
你应该看看你的方法定义:
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
字符串。
有人可以在我不完全清楚的以下一段 Scala 代码中引入更多的 shed 吗?我定义了以下函数
def ids(ids: String*) = {
_builder.ids(ids: _*)
this
}
然后我尝试将可变参数列表传递给此函数,如下所示:
def searchIds(kind: KindOfThing, adIds:String*) = {
...
ids(adIds)
}
首先,ids(adIds)
部分不起作用,起初有点奇怪,因为错误消息说:类型不匹配,预期:String,实际:Seq[String]。这意味着变量参数列表不会被类型化为集合或序列。
为了解决这个问题,请使用技巧 ids(adIds: _*)
。
我不是 100% 确定 :_* 是如何工作的,有人可以在上面放一些棚子吗? 如果我没记错的话 : 表示操作应用于右参数而不是左参数,_ 表示 "apply" 传递给元素,... 我检查了 String 和 Sequence scaladoc 但找不到 :_* 方法。
有人可以解释一下吗?
感谢
你应该看看你的方法定义:
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
字符串。