2012-06-20 34 views
13
list1 == list2 

Để thực hiện việc kiểm tra ở trên, Scala sẽ lặp qua cả hai danh sách và gọi bằng trên mỗi cặp thành phần?Phương thức equals của Scala hoạt động như thế nào trong trường hợp của Danh sách?

(Tôi chắc chắn, câu hỏi này đã được hỏi trước, nhưng tôi không thể tìm thấy một câu trả lời tốt với Google & Co)

+0

Bạn đã xem mã chưa? Scala là mã nguồn mở. –

+0

bạn đã thử chạy chưa? –

+2

@Tyler: Có, nhưng tôi không thể tìm thấy mã piec chính xác, vì Danh sách mở rộng rất nhiều lớp khác. –

Trả lời

24

Bạn có thể tìm thấy điều này ra cho mình phương pháp nào bằng cách nhìn vào Scaladoc và tìm hiểu nơi nó được xác định, và sau đó nhìn vào nguồn. Nếu bạn bắt đầu với online docs, bạn có thể thực hiện việc này chỉ bằng cách nhấp: chuyển đến phương pháp, mở nó bằng cách nhấp vào mũi tên bên trái và bạn sẽ thấy danh sách các lớp ghi đè. Đi đến cái đầu tiên, và nhìn vào nguồn.

Dù sao, trong trường hợp này, GenSeqLike, một supertrait của List và nhiều bộ sưu tập khác, định nghĩa equals như một tấm séc canEqual Tiếp theo sameElements. Đổi lại, sameElements kiểm tra xem cả hai đối số là LinearSeq s và nếu có, hãy gọi bằng mỗi cặp yếu tố bằng cách tách đầu và đuôi từng cái một. Nếu không, thiết bị sẽ mặc định sử dụng trình lặp, gọi số hasNext trên mỗi cái rồi so sánh các phần tử với equals.

Vì vậy, câu chuyện dài ngắn: có, nó gọi bằng nhau trên mỗi cặp yếu tố (dừng lại ngay sau khi tìm thấy sự không phù hợp).

+3

Hoàn hảo, cảm ơn bạn rất nhiều. Điều đó đã giúp rất nhiều (cũng cho các nghiên cứu trong tương lai). –

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