最近,我問了一下Clojure中的地圖組合鍵:How can you implement Composite keys in clojure? ...在java中重寫「equals」的clojure等價物是什麼?
的回答是,他們的工作與Java類似鑰匙 - 如果事情覆蓋「等於」,那麼它可以有效地作爲重點使用。
我想知道:是否有宏允許我們覆蓋「等於」自定義數據結構?例如,假設我想使用Map作爲關鍵字,並將唯一性定義爲「如果此地圖包含與另一個地圖相同的2個或更多元素,則它們是相同的」。我如何覆蓋地圖的默認行爲?
在java中,我發現這個工具在製作具有數千個豆類作爲關鍵字的高速地圖時非常強大。
只要你重寫你的散列函數,重寫equals也是可以的。一點也不瘋狂 - 標準,普通的好設計。任何好的GUI/lint類型的程序都會提醒你重寫一個,如果你重寫另一個。使用比較器有點難以理解,因爲它會將知識從你的課堂輸出到另一個(比較器) –
這看起來有點像範例衝突。有些人認爲「自我包容的對象,問他們是否平等」,而其他人則認爲「不變價值的構成」在等於是普遍的概念。 –
我並不反對重寫equals - 在Java中顯然通常是必需的。以他提出的方式覆蓋它*是一個可怕的想法,因爲不可能編寫一個'hashCode'函數,該函數符合決定讓equals等於任何至少與這個鍵共享兩個鍵的映射返回true的結論。 – amalloy