创建矩阵 - “值更新不是 Example.Matrix 的成员”错误

Creating a Matrix - "Value update is not a member of Example.Matrix" error

提问人:finite_diffidence 提问时间:7/17/2020 更新时间:7/17/2020 访问量:24

问:

我正在尝试创建一个简单的矩阵(基本上移植我用 C++ 编写的一些代码以更好地理解 Scala)。我写的代码是:

object Example extends App {
  case class Matrix(rows: Int = 1, columns: Int = 1) {
    val data = Array.fill[Int](rows * columns)(0)
    def apply(i: Int, j: Int) = this.data(i * columns + j)
  }

  val grid = Matrix()

  grid(0, 0) = 10
}

这不会编译,但据我所知,这在逻辑上等同于我的工作 C++ 示例。显然,由于应用功能,正在发生一些奇怪的事情。

有人可以解释为什么没有编译此代码吗?我似乎想不通。

非常感谢任何指导!

阵 列 斯卡拉 编译器错误 可变

评论


答:

2赞 Luis Miguel Mejía Suárez 7/17/2020 #1

val foo = gir(0, 0)会调用 ,但会调用 。applygrid(0, 0) = fooupdate

您需要这样定义它:

def update(i: Int, j: Int, x: Int): Unit = {
  this.data(i * columns + j) = x
}

顺便说一句,case 类不能是可变的!所以,请使用普通班级
而且,将私有化可能是件好事。
data


无论如何,一般的可变性以及数组Scala 中并不常见。 恕我直言,更好地理解 Scala 的最好方法不是尝试移植命令式代码,而是重新思考相同问题的函数式解决方案。