创建矩阵 - "Value update is not a member of Example.Matrix" 错误
Creating a Matrix - "Value update is not a member of Example.Matrix" error
我正在尝试创建一个简单的矩阵(基本上是移植我用 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++ 示例。显然,由于应用功能,一些奇怪的事情正在发生。
谁能解释一下为什么这段代码无法编译?我好像想不通。
非常感谢任何指导!
val foo = gir(0, 0)
会调用 apply
,但 grid(0, 0) = foo
会调用 update
.
你需要这样定义:
def update(i: Int, j: Int, x: Int): Unit = {
this.data(i * columns + j) = x
}
顺便说一句,案例 class 不能是可变的!所以,请使用正常的class.
而且,将 data
设为私有可能会更好。
无论如何,一般的可变性以及 数组 在 Scala 中并不常见。
恕我直言,更好地理解 Scala 的最佳方法不是尝试移植命令式代码,而是重新思考相同问题的功能解决方案。
我正在尝试创建一个简单的矩阵(基本上是移植我用 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++ 示例。显然,由于应用功能,一些奇怪的事情正在发生。
谁能解释一下为什么这段代码无法编译?我好像想不通。
非常感谢任何指导!
val foo = gir(0, 0)
会调用 apply
,但 grid(0, 0) = foo
会调用 update
.
你需要这样定义:
def update(i: Int, j: Int, x: Int): Unit = {
this.data(i * columns + j) = x
}
顺便说一句,案例 class 不能是可变的!所以,请使用正常的class.
而且,将 data
设为私有可能会更好。
无论如何,一般的可变性以及 数组 在 Scala 中并不常见。 恕我直言,更好地理解 Scala 的最佳方法不是尝试移植命令式代码,而是重新思考相同问题的功能解决方案。