2012-07-12 19 views
17

Ai đó có thể giúp tôi hiểu được nhiều đặc điểm "Thích" của Scala trong API thu thập. Tôi đã đọc qua và cố gắng so sánh mỗi người mà không có may mắn. Tôi nghĩ rằng tôi có thể thấy rằng Bản đồ ví dụ, mở rộng MapLike - thêm 2 phương pháp cụ thể. Nhưng điều này đặt ra câu hỏi về lý do tại sao làm điều này ở tất cả? Tại sao không chỉ có 1 Đặc điểm bản đồ trong API tập hợp thay vì Map và MapLike?MapLike của Scala, ListLike, SeqLike, v.v ... mỗi lần so sánh với Bản đồ, Danh sách, Seq như thế nào?

Cảm ơn bạn!

+0

bản sao có thể có của [Hướng dẫn thiết kế bộ sưu tập Scala 2.8] (http://stackoverflow.com/questions/1722137/scala-2-8-collections-design-tutorial) –

+0

Không thực sự là một bản sao ... câu hỏi này được gộp lại bởi cái đó. –

Trả lời

14

Các nguồn tốt nhất cho những chi tiết này là Martin Odersky and Lex Spoon's "What's New in Scala 2.8: The Architecture of Scala Collections":

Thư viện sưu tập Scala tránh sự trùng lặp mã và đạt được "cùng kết quả kiểu" nguyên tắc bằng cách sử dụng các nhà xây dựng chung và traversals qua các bộ sưu tập tại Somali được gọi là các đặc điểm triển khai. Những đặc điểm được đặt tên theo hậu tố Like; ví dụ: IndexedSeqLike là đặc điểm triển khai cho IndexedSeq và tương tự, TraversableLike là đặc điểm triển khai cho Traversable. Các lớp thu thập như Traversable hoặc IndexedSeq kế thừa tất cả triển khai phương pháp cụ thể của chúng từ những đặc điểm này. Các đặc điểm triển khai có hai thông số loại thay vì một cho bộ sưu tập thông thường. Họ parameterize không chỉ trên loại yếu tố của bộ sưu tập, mà còn trên của bộ sưu tập kiểu đại diện, tức, các loại của bộ sưu tập cơ bản, chẳng hạn như Seq[I] hoặc List[T] ...

Toàn bộ bài viết là cực kỳ hữu ích nếu bạn muốn tích hợp các lớp sưu tập của riêng bạn với API Bộ sưu tập hoặc nếu bạn chỉ muốn hiểu sâu hơn về cách hoạt động của thư viện.

+1

Tôi phải nói, từ chỉ đọc đoạn trích này, tôi không khôn ngoan hơn nhiều (tôi có cùng câu hỏi như @LalolnDublin): (Tôi thấy rằng có một số đặc điểm chung hơn, nhưng tôi thực sự không thể –

+0

@Karel: Hãy thử các bài viết! Đó là giá trị nỗ lực.Giải thích đầy đủ sẽ là quá dài để sao chép ở đây, và tôi không thấy bất kỳ điểm nào trong diễn giải khi nguồn gốc là dễ dàng như vậy có sẵn và đã rất rõ ràng –

+0

Cảm ơn bạn, sau khi đọc bài báo vài lần tôi vẫn gặp khó khăn trong việc nắm bắt khái niệm (là mới đối với scala không có ích) nhưng một mục quan trọng có vẻ là khái niệm "TraversableLike" (với 2 tham số kiểu) cho phép một người nào đó sử dụng giao diện Traverable mà không bị giới hạn trong một biểu diễn kiểu thống nhất của cả phần tử và biểu diễn của dữ liệu.Tôi không hiểu đầy đủ về điều này mà không có nhiều ví dụ hơn, nhưng tôi cảm thấy mình gần hơn một bước! – LaloInDublin

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