Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 使用apply设置实例变量_Scala - Fatal编程技术网

Scala 使用apply设置实例变量

Scala 使用apply设置实例变量,scala,Scala,使用Array可以使用vali=xs(0)和xs(0)=i语法获取和设置元素。如何在我自己的类中实现此功能?到目前为止,我只能实现获取值 class Matrix(val m : Int, val n : Int) { val matrix = Array.ofDim[Double](m, n) def apply(i:Int)(j:Int) = matrix(i)(j) } 更新:感谢毛里西奥对UPDATE方法的回答。这是最终版本 class Matrix(val m:Int, v

使用
Array
可以使用
vali=xs(0)
xs(0)=i
语法获取和设置元素。如何在我自己的类中实现此功能?到目前为止,我只能实现获取值

class Matrix(val m : Int, val n : Int) {
  val matrix = Array.ofDim[Double](m, n)

  def apply(i:Int)(j:Int) = matrix(i)(j)
}
更新:感谢毛里西奥对
UPDATE
方法的回答。这是最终版本

class Matrix(val m:Int, val n:Int) {
  private val matrix = Array.ofDim[Double](m, n)
  def apply(i:Int) = new {
    def apply(j:Int) = matrix(i)(j)

    def update(j:Int, v:Double) = { matrix(i)(j) = v }
  }
}

it("matrix") {
  val m = new Matrix(3, 3)
  m(0)(1) = 10.0
  val x = m(0)(1)

  x should equal(10.0)
  x.isNegInfinity should be (false) // Implicits for Double work!
}

您需要声明一个
update
方法:

class Matrix(val m : Int, val n : Int) {
  private val matrix = Array.ofDim[Double](m, n)

  def apply(i:Int)(j:Int) = matrix(i)(j)

  def update( i : Int, j : Int, value : Double) {
    matrix(i)(j) = value
  }

}

val m = new Matrix( 10, 10 )
m(9, 9) = 50

谢谢因此,如果我想使用与多维数组完全相同的语法,我需要使用update和apply方法实现MatrixRow类,并从Matrix的apply返回它。有没有办法创建一些匿名类而不是显式的类定义?调用方不会知道匿名类实现了什么方法,除非您将其设置为trait并返回由返回的匿名对象实现的该trait。即使没有trait,调用方看起来也会进行类型检查。我已经用有效的代码更新了这个问题。