2012-01-06 17 views
5

Zaczynam grać Scala, a jedną z pierwszych rzeczy, jakie czytałem, że vals są:vals Scala można modyfikować

zmienne, które są przypisane raz i nigdy nie zmienić, a Vars, że zmienne może się zmieniać w swoim życiu

Ale jestem ciekaw, dlaczego mogę to zrobić:

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

gdybym sprawdzić zmienną foo teraz jest uporządkowany, co oznacza, że ​​zmieniła ... także jeśli ja robić print (foo), oba mają to samo, więc zmienna wskazuje na ten sam obiekt (mogłem pomyśleć, że zmienna tylko wskazywała na nowy obiekt)

Czy ktoś mógłby wyjaśnić?

+3

[this] (http://stackoverflow.com/a/1792207/298389) może ci pomóc –

Odpowiedz

13

tablicy wskazywanej przez zmienną foo się zmienia, ale fakt, że foo punkty w tym Array nie zmienia. Spróbuj ponownie przypisać foo, a zobaczysz, czego szukasz.

+0

Oczywiście nie jestem dzisiaj zbyt jasny, wskaźnik do obiektu nie może się zmienić, ale wartość obiektu może, więc Mogę zrobić foo (0) = 5. Dzięki – jasalguero

+6

@jasalguero FYI scala zapewnia niezmienne kolekcje –

3

Problem nie jest związany z wartością val, ale z tablicą. Mimo że wartości są niezmienne, macierze są. Jeśli chcesz to zatrzymać, możesz użyć klasy w pakiecie niezmiennym.

Powiązane problemy