Gần đây tôi được hỏi về phím composite trong các bản đồ trong clojure: How can you implement Composite keys in clojure? ...Clojure tương đương với Overriding "bằng" trong java là gì?
Câu trả lời là họ làm việc tương tự như phím java - nếu một cái gì đó đè "bằng", sau đó nó có thể được sử dụng một cách hiệu quả như một chìa khóa.
Tôi đã tự hỏi: Có các macro cho phép chúng tôi ghi đè "bằng" cho cấu trúc dữ liệu tùy chỉnh không? Ví dụ: giả sử tôi muốn sử dụng Bản đồ làm khóa và xác định tính duy nhất là "nếu bản đồ này chứa 2 hoặc nhiều phần tử chung với một bản đồ khác, chúng giống nhau". Làm thế nào tôi có thể ghi đè lên hành vi mặc định của bản đồ?
Trong java, tôi thấy thiết bị này khá mạnh mẽ khi tạo bản đồ tốc độ cao với hàng nghìn hạt làm chìa khóa.
Ghi đè bằng đều miễn là bạn cũng ghi đè hàm băm của mình.Không điên rồ chút nào - tiêu chuẩn, thiết kế thông thường. Bất kỳ chương trình GUI/lint nào tốt sẽ nhắc bạn ghi đè lên một chương trình nếu bạn ghi đè lên chương trình khác. Sử dụng so sánh là một mô hình hơi nastier khi nó xuất khẩu kiến thức từ lớp học của bạn vào lớp khác (so sánh) –
Điều này trông giống như một chút xung đột mô hình. Một số người đang nghĩ rằng "những vật thể tự chứa, hỏi họ xem họ có bình đẳng không" trong khi những người khác đang nghĩ "thành phần của những giá trị bất biến", nơi ý tưởng về đẳng thức là phổ quát. –
Tôi không chống lại trọng số bằng - nó rõ ràng thường cần thiết trong Java. Ghi đè * theo cách anh ta hỏi * là một ý tưởng tồi tệ, vì không thể viết hàm 'hashCode' phù hợp với quyết định có' equals' trả về true cho bất kỳ bản đồ nào chia sẻ ít nhất hai khóa với cái này . – amalloy