2012-01-06 14 views
5

sto iniziando a giocare con Scala, e una delle prime cose che ho letto è che vals sono:vals Scala possono essere modificati

variabili che vengono assegnati una volta e mai cambiare, e VAR, variabili che possono cambiare nel corso della loro vita

Ma io sono curioso di sapere perchè posso fare questo:

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

Se controllo la variabile foo ora è ordinato, il che significa che è cambiato ... anche se io fare print (foo), entrambi hanno lo stesso, quindi la variabile punta allo stesso oggetto (avrei potuto pensare che la variabile indicasse solo un nuovo oggetto)

Qualcuno potrebbe chiarire?

+3

[questo] (http://stackoverflow.com/a/1792207/298389) potrebbe aiutarti –

risposta

13

nell'array puntato dalla variabile foo sta cambiando, ma il fatto che foo punti in quel Array non cambia. Prova a riassegnare lo foo e vedrai cosa stai cercando.

+0

Naturalmente, non sono molto chiaro oggi, il puntatore all'oggetto non può cambiare ma il valore dell'oggetto può, quindi Posso fare un foo (0) = 5. Grazie – jasalguero

+6

@jasalguero FYI scala fornisce collezioni immutabili –

3

Il problema non è con val, ma con Array. Sebbene i valori siano immodificabili, lo sono gli array. Se stai cercando di fermarlo, puoi usare una classe all'interno del pacchetto immutabile.

Problemi correlati