2010-03-25 8 views

Trả lời

5

Câu trả lời theo nghĩa đen là vì apply()implemented về ++, được định nghĩa trong SortedSet, và do đó trả về một SortedSet. ++ sau đó tiếp tục sử dụng +, trong đó được xác định trong TreeSet, vì vậy bạn có thể truyền trở lại TreeSet nếu điều đó quan trọng (mặc dù tôi sẽ không khuyên bạn nên nó phụ thuộc và có thể thay đổi theo thời gian!).

Bạn cần gì từ TreeSet mà bạn không thể nhận được từ SortedSet?

Tôi không chắc chắn lý do đằng sau quyết định thiết kế là gì, mặc dù có vẻ như nó đã thay đổi trong 2.8.

+0

Tôi không muốn có một 'TreeSet', tôi sẽ không yêu cầu' TreeSet' phải không? Nên 'List (1,2,3)' trả lại 'Iterable'? Vấn đề chính của tôi với 'SortedSet' là tôi không thể xóa một elment khỏi nó và giữ kiểu của nó là' SortedSet'. Những gì bạn thực sự nói ở đây là "vâng thưa ông, đó là một túi" ;-). –

+0

Đúng, đó chắc chắn là một trường hợp sử dụng hợp lệ, và tôi đã không nhận thấy rằng rất nhiều các phương pháp đó không bị ghi đè trên 'SortedSet'. Nó có thể là giá trị yêu cầu về thiết kế API trên danh sách gửi thư. Trong thời gian chờ đợi, bạn có thể giảm kết quả hoặc xây dựng thiết lập bằng cách sử dụng 'TreeSet.empty' và' + '(như bạn có thể đã biết). –

5

Điều này đã được xác định là một sự xuất hiện ngắn của thư viện bộ sưu tập scala hiện tại và được giải quyết trong thư viện bộ sưu tập được cải tiến là một phần của scala 2.8. Xem http://www.scala-lang.org/sid/3# để biết chi tiết đẫm máu.