Question Échange de deux vars en scala [duplicate]


Duplication possible:
Déclaration de paramètre de tuple et bizarrerie d'affectation 

En python je peux faire

>>> (a,b) = (1,2)
>>> (b,a) = (a,b)
>>> (a,b)
(2, 1)

Mais en scala:

Welcome to Scala version 2.8.1.final (OpenJDK Server VM, Java 1.6.0_20).
Type in expressions to have them evaluated.
Type :help for more information.

scala> var (a,b) = (1,2)
a: Int = 1
b: Int = 2

scala> (a,b)=(b,a)
<console>:1: error: ';' expected but '=' found.
       (a,b)=(b,a)
            ^

Donc, alors que je peux initialiser les vars comme un tuple, je ne peux pas les attribuer à un tuple. Un moyen de contourner ce problème, autre que l'utilisation d'un tmp var?


10
2017-07-10 15:51


origine


Réponses:


Malheureusement, il n'y a pas de moyen simple. L'expression (a,b) construit un objet immuable de type Tuple[Int, Int]. Dans ce tuple, les identités de a et b comme mutable vars sont perdus. Deux questions précédentes peuvent donner un peu plus d'informations:

Déclaration de paramètre de tuple et bizarrerie d'affectation 

Est-il possible d'avoir une affectation de tuple aux variables dans Scala?


6
2017-07-10 16:11



C'est Scala 2.9.0.1

scala> val pair = (1,2)
pair: (Int,Int) = (1,2)

scala> val swappedPair = pair.swap
swappedPair: (Int,Int) = (2,1)

La méthode swap produit un autre tuple au lieu de changer l'ancien et je ne sais pas s'il a été présent dans Scala 2.8.1.


12
2017-07-10 20:37