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

Scala中与apply方法对应的左值赋值操作如何实现?支持小括号赋值语法

Scala矩阵赋值语法实现方案

Scala完全支持你需要的这种括号语法赋值特性,无需直接暴露data成员或单独自定义setter方法,对应的语法糖依赖update方法实现。

语法规则

当编译器解析到obj(arg1, arg2, ..., argN) = value写法时,会自动将其转换为obj.update(arg1, arg2, ..., argN, value)的方法调用:

  • 括号内的所有参数作为update方法的前N个入参
  • 等号右侧的赋值内容作为update方法的最后一个入参

实现代码

修改后的Matrix类如下,还可以将data设为私有进一步提升封装性:

class Matrix(val n: Int, val m: Int, val default: Double = 0) {
  private val data: Array[Array[Double]] = Array.fill(n, m)(default)
  // 读操作:对应matrix(x,y)调用
  def apply(x: Int, y: Int): Double = data(x)(y)
  // 写操作:对应matrix(x,y) = value调用
  def update(x: Int, y: Int, value: Double): Unit = data(x)(y) = value
}

调用示例

val matrix = new Matrix(3, 3)
matrix(2, 2) = 5 // 等价于matrix.update(2, 2, 5)
println(matrix(2, 2)) // 输出5,等价于println(matrix.apply(2,2))

补充说明

这种语法糖是Scala原生内置的,我们平时使用数组时的arr(0) = 10写法,本质就是调用了Array类的update方法,和Python的__setitem__、C++的括号运算符重载功能定位一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:24:11