You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala变长参数(varargs)调用疑问:为何混合传参不被允许?

Scala可变参数调用问题解析

你定义的func方法确实支持接收任意数量的String类型参数,前两种调用方式完全合法,但第三种写法会报错,核心原因和解决办法如下:

为什么第三种调用不合法?

Scala里的可变参数(String*)会将传入的参数自动打包为Seq[String],而_*是专门用来展开序列为可变参数列表的符号,但它有个硬性规则:只能放在参数列表的最后一个位置,不能和其他普通参数混合使用。

当你尝试func("foo", strArr: _*)时,strArr: _*不是最后一个参数位置,编译器无法解析这种混合写法,因此直接报错。

可行的替代方案

如果需要同时传入单个字符串和数组中的元素,只需先将单个元素与数组合并成一个新序列,再用_*展开即可:

val strArr = Array("hello", "world")
// 用+:在数组头部添加元素,再展开
func(("foo" +: strArr): _*)

// 或者用Seq合并后展开
func(Seq("foo") ++ strArr: _*)

也可以直接合并数组后传递:

val strArr = Array("hello", "world")
func((Array("foo") ++ strArr): _*)

内容的提问来源于stack exchange,提问作者Juan Cruz Carrau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 13:45:38