加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala变量参数:_ *

发布时间:2020-12-16 18:05:40 所属栏目:安全 来源:网络整理
导读:有人可以带来更多关于 scala代码的内容,这对我来说并不完全清楚吗?我有以下功能定义 def ids(ids: String*) = { _builder.ids(ids: _*) this } 然后我试图将变量参数列表传递给此函数,如下所示: def searchIds(kind: KindOfThing,adIds:String*) = {...ids
有人可以带来更多关于 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个字符串.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读