2012-01-06 18 views
5

estoy empezando a jugar con Scala, y una de las primeras cosas que he leído es que el vals son:Vals Scala se pueden modificar

las variables que se asignan una vez y nunca cambian, y VARs, variables que pueden cambiar a lo largo de su vida

pero tengo curiosidad por qué puedo hacer esto:

val foo = Array(1, 3 ,2) 
scala.util.Sorting.quickSort(foo) 

Si puedo comprobar la variable foo ahora se ordena, lo que significa que ha cambiado ... también si hacer print (foo), ambos tienen lo mismo, por lo que la variable apunta al mismo objeto (podría haber pensado que la variable apuntaba a un nuevo objeto)

¿Alguien podría aclarar?

+3

[this] (http://stackoverflow.com/a/1792207/298389) podría ayudarlo –

Respuesta

13

La matriz apuntada por la variable foo está cambiando, pero el hecho de que foo apunta a ese Array no cambia. Intente reasignar foo y verá lo que está buscando.

+0

Por supuesto, no estoy muy claro hoy, el puntero al objeto no puede cambiar, pero el valor del objeto puede, por lo que Puedo hacer un foo (0) = 5. Gracias – jasalguero

+6

@jasalguero FYI scala proporciona colecciones inmutables –

3

El problema no está en val, sino en Array. Aunque los valores no se pueden modificar, las matrices sí lo son. Si está buscando detener esto, puede usar una clase dentro del paquete inmutable.

Cuestiones relacionadas