2010-03-28 22 views
13

Khi cố gắng viết một API, tôi đang đấu tranh với các bộ sưu tập của Scala trong 2.8 (.0-beta1).Làm cách nào để triển khai bộ sưu tập trong Scala 2.8?

Về cơ bản những gì tôi cần là phải viết cái gì đó:

  • thêm chức năng để bộ bất biến của một loại nhất định
  • nơi mà tất cả các phương pháp như lọc và bản đồ trả về một bộ sưu tập cùng loại mà không cần phải ghi đè tất cả mọi thứ (đó là lý do tại sao tôi đã đi 2,8 lần đầu tiên)
  • nơi tất cả các bộ sưu tập mà bạn đạt được thông qua các phương pháp đó được xây dựng với cùng thông số mà bộ sưu tập gốc có được (tương tự như cách SortedSet trao tay qua đơn hàng qua implicits)
  • mà vẫn là một đặc điểm riêng của nó, độc lập với bất kỳ triển khai tập hợp nào.

Ngoài ra, tôi muốn xác định triển khai mặc định, ví dụ: dựa trên HashSet. Đối tượng đồng hành của đặc điểm có thể sử dụng cài đặt mặc định này. Tôi không chắc chắn nếu tôi cần toàn bộ sức mạnh của các nhà máy xây dựng để lập bản đồ loại bộ sưu tập của tôi cho các loại bộ sưu tập khác.

Tôi đọc số paper on the redesign of the collections API nhưng có vẻ như mọi thứ đã thay đổi một chút kể từ đó và tôi thiếu một số chi tiết trong đó. Tôi cũng đã đào sâu qua mã nguồn của bộ sưu tập nhưng tôi không chắc nó có phù hợp hay không. Lý tưởng nhất mà tôi muốn xem là một hướng dẫn thực hành cho tôi biết từng bước một, chỉ cần các bit mà tôi cần hoặc mô tả chi tiết về tất cả các chi tiết để tôi có thể tự đánh giá bản thân mình . Tôi thích chương về bình đẳng đối tượng trong "Lập trình trong Scala". :-)
Nhưng tôi đánh giá cao bất kỳ gợi ý nào về tài liệu hoặc ví dụ giúp tôi hiểu thiết kế bộ sưu tập mới tốt hơn.

+2

http://lampwww.epfl.ch/~odersky/papers/fsttcs2009.pdf –

+0

Cảm ơn, Lukas, tôi cũng sẽ đọc nó. –

+3

Xem thêm http://daily-scala.blogspot.com/2010/04/creating-custom-traversable.html ("Tạo triển khai Traversable tùy chỉnh", từ Jesse Eichar và blog "Daily scala") – VonC

Trả lời

17

Tôi muốn xem xét việc triển khai collection.immutable.BitSet. Đó là một chút lây lan ra, tái sử dụng những thứ từ collection.BitSetLike và collection.generic.BitSetFactory. Nhưng nó thực hiện chính xác những gì bạn đã chỉ định: triển khai một tập hợp bất biến của một loại phần tử nhất định bổ sung thêm chức năng mới.

+0

Cảm ơn con trỏ Martin, tôi sẽ nhìn vào BitSet. Nó có vẻ rõ ràng hơn SortedSet. Những gì tôi thực sự muốn viết là cái gì đó xây dựng trên đầu trang của bộ nhưng độc lập với bất kỳ triển khai của bộ. Sau đó tôi muốn một lớp khác thực sự thực hiện tính cách của tôi bằng cách kết hợp nó với một cài đặt được thiết lập. Tôi đoán lựa chọn ở đây là trộn lẫn hoặc chuyển tiếp. –

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