gpt4 book ai didi

Scala 变量参数 :_*

转载 作者:行者123 更新时间:2023-12-03 18:27:02 24 4
gpt4 key购买 nike

有人可以在下面一段我不完全清楚的 Scala 代码上带来更多的空间吗?我定义了以下功能

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

然后我试图将变量参数列表传递给这个函数,如下所示:
def searchIds(kind: KindOfThing, adIds:String*) = {
...
ids(adIds)
}

首先, ids(adIds)一块不起作用,起初有点奇怪,因为错误消息说:类型不匹配,预期:字符串,实际:序列[字符串]。这意味着变量参数列表不是作为集合或序列类型化的。

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

我不是 100% 确定 :_* 是如何工作的,有人可以在上面放一些棚子吗?
如果我没记错的话:表示操作应用于右参数而不是左参数,_ 表示“应用于”传递的元素,...
我检查了 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 变量参数 :_*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30590862/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com