Niedawno poprosił o klucze kompozytowych w mapach w Clojure: How can you implement Composite keys in clojure? ...Co to jest odpowiednik clojure Overriding "equals" w java?
Odpowiedzią było to, że działają one podobnie do kluczy java - jeśli coś nadpisuje „równa się”, to może być skutecznie stosowany jako klucz.
Zastanawiam się: czy istnieją makra, które pozwalają nam przesłonić "równe" dla niestandardowych struktur danych? Powiedzmy na przykład, że chcę użyć mapy jako klucza i zdefiniować unikalność jako "jeśli ta mapa zawiera co najmniej dwa elementy wspólne z inną mapą, są one równe". Jak mogę przesłonić domyślne zachowanie mapy?
W java, uważam ten obiekt za dość potężny przy tworzeniu map o dużej prędkości z tysiącami fasoli jako kluczami.
Przesłanianie równań jest w porządku, o ile tylko przesłonisz funkcję mieszania.Nie szaleństwo - standardowy, dobry dobry projekt. Każdy dobry program typu GUI/lint-type będzie przypominał o zastąpieniu jednego, jeśli zastąpisz drugi. Używanie komparatora jest nieco gorszym schematem, ponieważ eksportuje wiedzę z twojej klasy do innej (komparatora). –
To wygląda na zderzenie paradygmatu. Niektórzy myślą "samodzielne obiekty, pytają, czy są równi", podczas gdy inni myślą o "składzie niezmiennych wartości", gdzie idea równości jest uniwersalna. –
Nie jestem przeciwnikiem przeciążania - to oczywiste, często konieczne w Javie. Zastąpienie go * w sposobie, w jaki pyta * jest okropnym pomysłem, ponieważ niemożliwe jest napisanie funkcji 'hashCode', która jest zgodna z decyzją, aby' równy' zwracał wartość true dla każdej mapy, która ma co najmniej dwa klucze z tym . – amalloy