4

Lorsque ce code est exécuté:Assigner méthode Scala

var a = 24 
var b = Array (1, 2, 3) 
a = 42 
b = Array (3, 4, 5) 
b (1) = 42 

Je vois trois missions (cinq?) Ici. Quel est le nom de l'appel de méthode appelé dans de telles circonstances? Est-ce une surcharge de l'opérateur?

Mise à jour:
Puis-je créer une affectation de classe et de surcharge? (X = y pas x (1) = y)

Répondre

16

Avec ce fichier:

//assignmethod.scala 
object Main { 
    def main(args: Array[String]) { 
    var a = 24 
    var b = Array (1, 2, 3) 
    a = 42 
    b = Array (3, 4, 5) 
    b (1) = 42 
    } 
} 

course scalac -print assignmethod.scala nous donne:

[[syntax trees at end of cleanup]]// Scala source: assignmethod.scala 
package <empty> { 
    final class Main extends java.lang.Object with ScalaObject { 
    def main(args: Array[java.lang.String]): Unit = { 
     var a: Int = 24; 
     var b: Array[Int] = scala.Array.apply(1, scala.this.Predef.wrapIntArray(Array[Int]{2, 3})); 
     a = 42; 
     b = scala.Array.apply(3, scala.this.Predef.wrapIntArray(Array[Int]{4, 5})); 
     b.update(1, 42) 
    }; 
    def this(): object Main = { 
     Main.super.this(); 
    () 
    } 
    } 
} 

Comme vous pouvez le voir le compilateur change juste le dernier (b (1) = 42) à l'appel de la méthode:

b.update(1, 42) 
+0

Merci. Réponse très utile –

9

complément Michael'sanswer, l'affectation ne peut pas être remplacée dans Scala, bien que vous puissiez créer un opérateur de type affectation, par exemple :=.

Les "missions" qui peuvent être surchargées sont:

// method update 
a(x) = y 
// method x_=, assuming method x exists and is also visible 
a.x = y 
// method +=, though it will be converted to x = x + y if method += doesn't exist 
a += y 
+0

Comment cela fonctionne-t-il alors? 'val a: BigInt = 1'? – Jus12

+0

@Amitabh Ce n'est pas une affectation, mais une déclaration, et il n'y a rien de surchargé ici. Quelle est la question? Ce '1 'n'est pas un' BigInt'? Si c'est le cas, il y a une conversion implicite disponible de 'Int' à' BigInt', de sorte que le nombre est converti en 'BigInt' avant d'être assigné. –

+0

Oui c'est la question. Je veux faire une variante de BigInt (appelons ça BI). Je suis incapable de comprendre comment faire cette conversion implicite. – Jus12

Questions connexes