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

使用Map中元组为数组赋值时提示参数过多问题排查

问题分析与解决

这个问题我之前帮人排查过,其实就是对Scala二维数组的访问语法理解错了~

你碰到的too many arguments for method update错误,核心原因是:Scala里的二维数组本质是「数组的数组」,不是原生的二维结构。

用Array.ofDim[String](3, 3)创建的boardRep,实际类型是Array[Array[String]]——外层数组的每个元素都是一个字符串数组(对应二维数组的一行)。所以要给某个位置赋值,得先定位到行数组,再定位到行里的列元素,正确语法是boardRep(row)(col) = value,而不是像其他语言那样用boardRep(row, col)。

你原来的代码里boardRep((key._1), (key._2)) = value,会被Scala解析成调用boardRep.update(key._1, key._2, value),但Array的update方法只接受两个参数(索引和要设置的值),这就导致了「参数过多」的错误。

修正后的代码

把访问方式改成两层括号,同时可以优化一下模式匹配的写法,让代码更直观:

val a = Map((1,1) -> "alex", (2,2) -> "Jade")
val boardRep = Array.ofDim[String](3, 3)
a foreach { case ((row, col), value) => 
  boardRep(row)(col) = value 
}

这样修改后,运行就能达到你的预期:

  • boardRep(1)(1)的值是"alex"
  • boardRep(2)(2)的值是"Jade"
    其他未赋值的位置会是String数组的默认初始值null。

小补充

如果实在习惯了boardRep(row, col)这种写法,也可以通过隐式类给二维数组扩展一个支持该语法的update方法,但日常开发中用原生的boardRep(row)(col)已经足够简洁,没必要额外封装。

内容的提问来源于stack exchange,提问作者Aman Jha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:42:45