# Setting instance vars with apply

With Array it's possible to get and set elements with val i = xs(0) and xs(0) = i syntax. How to implement this functionality in my own class? So far I was only able to implement getting the values.

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: Thanks to Mauricio for answer about update method. That's the final version

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! }

## Answers

You need to declare an update method:

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