2012-01-06 5 views
5

수정, 내가 읽은 첫 번째 것들 중 하나는 발스가 있다는 것입니다 수 있습니다스칼라 놈들은 내가 스칼라 플레이 시작 했어

변경하면 결코 할당 된 변수 및 바르 변수가 평생

에 따라 변화하지만이 작업을 수행 할 수있는 이유가 궁금 수 있습니다

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

나는 경우 또한 변경을 의미 지금 주문한 푸 변수를 ... 선택하면 할 print (foo)는 둘 다 동일하므로 변수가 동일한 객체를 가리키고 있습니다 (변수가 방금 새 객체를 가리킨다 고 생각했을 수도 있습니다)

아무도 명확하게 알 수 있습니까?

+3

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

답변

13

foo 변수가 가리키는 배열은 변경되지만 foo이 가리키는 배열은 Array이며 변경되지 않습니다. foo을 다시 할당하면 찾고있는 것을 볼 수 있습니다.

+0

물론 오늘 명확하지 않지만 개체에 대한 포인터를 변경할 수는 없지만 개체의 값은 그렇게 할 수 있습니다. 나는 foo (0) = 5를 만들 수 있습니다. 감사합니다. – jasalguero

+6

@jasalguero FYI scala는 불변의 콜렉션을 제공합니다. –

3

문제는 val이 아닌 Array를 사용합니다. 값은 변경할 수 없지만 배열은 있습니다. 이것을 막으려면 패키지 내의 클래스를 불변으로 사용할 수 있습니다.