Trong documentation of Clojure's type mechanisms, nó được tuyên bố rằngTại sao thư viện lõi Clojure sử dụng dẫn xuất bê tông?
- nguồn gốc bê tông là xấu
- bạn không thể lấy được kiểu dữ liệu từ các lớp bê tông, chỉ có giao diện
Tuy nhiên, một số số core Clojure classes sử dụng dẫn xuất bê tông (t đây là những ví dụ khác, nhưng đây là những trường hợp duy nhất mà cha là một phần của clojure.lang
):
ARef
kéo dàiAReference
Agent
kéo dàiARef
Atom
kéo dàiARef
Namespace
kéo dàiAReference
Ref
kéo dàiARef
Var
kéo dàiARef
Bên cạnh đó, có rất nhiều lớp trừu tượng. Tuy nhiên, không có cách nào để tạo ra tương đương với một lớp trừu tượng trong Clojure, và với tôi, phần mở rộng của một lớp trừu tượng dường như có tất cả các nhược điểm giống như dẫn xuất bê tông thông thường.
Tại sao dẫn xuất bê tông được sử dụng ở đây?
Cùng một trang cũng cảnh báo chống lại sự biến đổi và đóng gói, nhưng các lớp trong 'clojure.lang' chứa nhiều trường riêng tư có thể thay đổi. Đừng nhầm lẫn giữa các chi tiết triển khai nội bộ của ngôn ngữ với cách sử dụng ngôn ngữ đó. – Alex
@Alex Lý do duy nhất tôi quan tâm là phần mở rộng của giao diện trong 'clojure.lang' là cách * duy nhất * để triển khai cấu trúc dữ liệu mới trong Clojure tương thích với các hàm trong' clojure.core'. Nếu mọi thứ trong gói đó thực sự chỉ là các chi tiết thực hiện, thì kiến thức về các hoạt động của nó không nên được yêu cầu cho phần mở rộng đó. –