2012-01-06 25 views
5

tôi bắt đầu chơi với Scala, và một trong những điều đầu tiên tôi đọc là Vals là:Vals Scala thể được sửa đổi

biến được gán một lần và không bao giờ thay đổi, và vars, biến có thể thay đổi theo cuộc đời của họ

Nhưng tôi tò mò tại sao tôi có thể làm điều này:

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

Nếu tôi kiểm tra các biến foo hiện đang ra lệnh, có nghĩa là nó đã thay đổi ... còn nếu tôi làm in (foo), cả hai đều giống nhau, do đó biến được trỏ đến cùng một đối tượng (tôi có thể nghĩ rằng biến chỉ trỏ đến một đối tượng mới)

Có thể làm rõ không?

+3

[this] (http://stackoverflow.com/a/1792207/298389) có thể giúp bạn –

Trả lời

13

Mảng được trỏ đến bởi biến số foo đang thay đổi, nhưng thực tế là foo điểm tại đó Array không thay đổi. Hãy thử gán lại foo và bạn sẽ thấy những gì bạn đang tìm kiếm.

+0

Tất nhiên, tôi không rõ ràng ngày hôm nay, con trỏ đến đối tượng không thể thay đổi nhưng giá trị của đối tượng có thể, vì vậy Tôi có thể tạo một foo (0) = 5. Cảm ơn – jasalguero

+6

@jasalguero FYI scala cung cấp các bộ sưu tập không thay đổi –

3

Vấn đề không phải là với val, nhưng với mảng. Mặc dù các giá trị là không thể thay đổi, mảng được. Nếu bạn đang tìm cách để ngăn chặn điều này, bạn có thể sử dụng một lớp trong gói không thay đổi.

Các vấn đề liên quan