2012-10-31 20 views
32

Trong khi defrecord là hình thức ưa thích nhất -để các đựng pin- chung trong Clojure để xác định một "thực thể", trong ClojureScript người ta có thể tìm thấy nhiều tài liệu tham khảo để deftype, như được phản ánh trong variousdocumentation.deftype vs defrecord

Sự khác nhau giữa hai biểu mẫu là gì? Nên thích cái nào?

Trả lời

43

deftype tạo ra một đối tượng xương trần triển khai giao thức.

defrecord tạo bản đồ bền vững không thay đổi được thực hiện giao thức.

Việc sử dụng tùy thuộc vào những gì bạn muốn. Bạn có muốn cấu trúc dữ liệu ClojureScript đầy đủ không? Sau đó sử dụng một bản ghi. Bạn chỉ muốn một điều trần xương mà không làm gì ngoài việc đáp ứng một giao thức? Sau đó sử dụng một loại.

Hai bit tài liệu bạn tham chiếu sử dụng các loại vì chúng đang cố gắng minh họa các giao thức ở cấp cơ bản nhất và các loại có ít "xảy ra" hơn so với bản ghi, vì vậy để nói. Tuy nhiên, hầu hết các ứng dụng thực tế của những thứ giống như đối tượng trong Clojure/ClojureScript cần lưu trữ các trường dữ liệu cùng với đối tượng và bạn nên sử dụng một cách rõ ràng một bản ghi, vì lý do tương tự bạn nên sử dụng bất kỳ Bộ sưu tập bất biến của Clojure.

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