Tôi đang phát triển một cấu trúc dữ liệu phức tạp trong Clojure với nhiều cấu trúc phụ.Tóm tắt các chi tiết triển khai cấu trúc dữ liệu trong Clojure
Tôi biết rằng tôi sẽ muốn mở rộng cấu trúc này theo thời gian và đôi khi muốn thay đổi cấu trúc bên trong mà không phá vỡ cấu trúc dữ liệu khác nhau (ví dụ: tôi có thể muốn thay đổi vectơ thành băm một số loại cấu trúc chỉ mục vì lý do hiệu suất, hoặc kết hợp một loại Java)
suy nghĩ hiện tại của tôi là:
- Xác định một giao thức cho các cấu trúc tổng thể với các phương pháp accessor khác nhau
- Tạo một mini-thư viện các hàm điều hướng cấu trúc dữ liệu e .g. (Query-Hạ tầng cơ sở-abc param1 param2)
- Thực hiện các cấu trúc dữ liệu sử dụng defrecord hoặc deftype, với các phương pháp giao thức được định nghĩa để sử dụng thư viện mini-
Tôi nghĩ rằng điều này sẽ làm việc, mặc dù tôi lo lắng nó đang bắt đầu trông giống như rất nhiều "keo" mã. Ngoài ra nó cũng có thể phản ánh sự quen thuộc của tôi với các phương pháp hướng đối tượng.
Cách được khuyến nghị để thực hiện điều này trong Clojure là gì?
Cảm ơn Michal! Insightful như bao giờ :-) chắc chắn sẽ xem xét các tùy chọn ILookup và Associative – mikera
Đây là một câu trả lời rất hữu ích! Nhưng gần ba năm sau nó sẽ rất tuyệt vời để cập nhật điều này (hoặc tạo ra một câu trả lời mới) dựa trên tính năng hiện có sẵn trong 1.5. Một điều tôi nhận thấy là 'defrecord' hiện phát ra các chức năng của nhà máy, không chắc chắn những thay đổi khác có thể ảnh hưởng đến câu trả lời này. –
Tôi nghĩ câu trả lời này cũng có thể sử dụng bản cập nhật - ngay cả cuốn sách của O'Reily Clojure cũng cho biết rằng tính năng defrecord của clojure tạo ra các chức năng của nhà máy. – djhaskin987