2010-07-09 40 views
9
scala> List(1,2,3) == List(1,2,3) 

res2: Boolean = true 

scala> Map(1 -> "Olle") == Map(1 -> "Olle") 

res3: Boolean = true 

Nhưng khi cố gắng làm tương tự với Array, nó không hoạt động giống nhau. Tại sao?Hành vi lạ của loại mảng

scala> Array('a','b') == Array('a','b') 

res4: Boolean = false 

Tôi đã sử dụng 2.8.0.RC7 và 2.8.0.Beta1-prerelease.

+1

Lưu ý: Bạn có thể tìm kiếm tất cả các câu hỏi liên quan đến mảng scala với [scala] [array] – oluies

+0

bản sao có thể có của [Tại sao \ Array (0,1,2) == Array (0,1,2) \ ' không trả về kết quả mong đợi?] (http://stackoverflow.com/questions/2481149/why-does-array0-1-2-array0-1-2-not-return-the-expected-result) – Suma

Trả lời

17

Do định nghĩa "bằng" cho mảng là chúng tham chiếu đến cùng một mảng.

Điều này phù hợp với sự bình đẳng mảng của Java, sử dụng Object.Equals, vì vậy nó so sánh các tham chiếu.

Nếu bạn muốn kiểm tra các yếu tố cặp, sau đó sử dụng sameElements

Array('a','b').sameElements(Array('a','b')) 

hoặc deepEquals, đã được tán thành trong 2,8, vì vậy thay vì sử dụng:

Array('a','b').deep.equals(Array('a','b').deep) 

Có một cuộc thảo luận Nabble tốt trên array equality .

+2

Là mảng chỉ ngoại lệ cho quy tắc chung của việc so sánh các phần tử thực tế cho các bộ sưu tập được xây dựng trong? Tất cả các bộ sưu tập khác mà tôi đã thử so sánh các phần tử. –

+2

@olle - theo như tôi biết, đó là bộ sưu tập duy nhất thể hiện hành vi này. Ngay cả 'ArrayList' so sánh các phần tử. Những gì tôi không thể tìm ra, là làm thế nào điều này là nghĩa vụ phải được học từ tài liệu hướng dẫn :) – Stephen

+3

cũng thấy http://stackoverflow.com/questions/2481149/why-does-array0-1-2-array0-1- 2-không-return-the-expected-result – oluies