2011-07-10 7 views
10

Duplicar posibles:
Tuple parameter declaration and assignment oddityAlternar los dos vars en Scala

en Python que pueden hacer

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

Pero 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) 
      ^

Entonces, aunque puedo inicializar vars como una tupla, no puedo asignarlos como una tupla. ¿Alguna forma de evitar esto, aparte de usar un tmp var?

+0

¿Existe un duplicado? http://stackoverflow.com/questions/1624484/tuple-parameter-declaration-and-assignment-oddity http://stackoverflow.com/questions/6196678/is-it-possible-to-have-tuple-assignment-to -variables-in-scala –

Respuesta

12

Ésta es 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) 

El método swap produce otra tupla en lugar de cambiar el viejo y No sé si ha estado allí en Scala 2.8.1.

+2

sí, está allí en 2.8, pero esto solo devuelve una tupla intercambiada. Entonces, el problema de intercambiar los identificadores de los vars no está resuelto. – georg