2016-04-02 17 views
1

kann ich apply in Scala verwenden, um den Operator () zu überlasten.Mit einem Ausdruck a (1) = 10 statt a.set (1,10) in Scala

class A { 
    val arr = Array[Int](1,2,3,4,5) 
    def apply(i:Int) = { 
     arr(i) 
    } 
} 
object Main extends App { 
    val a = new A 
    println(a(0)) 
} 

Wenn ich den Wert eingestellt, kann ich die Set-Methode

def set(i:Int, value:Int) = {arr(i) = value} 
... 
arr.set(3, 10) 
hinzufügen

Ist Scala besser syntaktischer Zucker erlauben wie arr(3) = 10 die gleichen Ergebnisse zu erhalten?

+1

Sie wissen, könnten Sie schreiben Sie einfach 'arr (3) = 10' und die Compiler-Fehler wird der Name des Verfahrens enthalten, die Sie vermissen. –

Antwort

7

Sie könnten die update Methode definieren:

scala> class A { 
    |  val arr = Array[Int](1,2,3,4,5) 
    |  def apply(i: Int) = { 
    |   arr(i) 
    |  } 
    |  def update(i: Int, x: Int) { 
    |   arr(i) = x 
    |  } 
    | } 
defined class A 

scala> val a = new A 
a: A = [email protected] 

scala> a(0) 
res0: Int = 1 

scala> a(0) = 42 

scala> a(0) 
res2: Int = 42