看看這個簡單的類我建設爲基數,以存儲字符串匹配算法的結果:爲什麼這些對象默認在D中不相等?
/** Match of a single pattern in full to a single text. */
class Match {
uint Tpos;
this(in uint Tpos) { this.Tpos = Tpos; }
override string toString() {
return text("Match: [email protected]",Tpos);
}
}
這就是事情變得怪異:
auto m1 = new Match(1), m2 = new Match(1);
writeln(m1.toHash());
writeln(m2.toHash());
writeln(m1 == m2);
打印
4464528
4464512
false
我沒有看到爲什麼這兩個對象默認不應該被認爲是相同的。我想我可以寫一個自定義toHash()
和opEquals()
函數,但這似乎是矯枉過正。根據Andrei Alexandrescu的D編程語言book(偉大的書!),「默認情況下,散列是通過使用對象的按位表示來計算的。」那裏有任何想法?
感謝您的源代碼和洞察力。我沒有意識到==相比於默認身份。無論如何,我最終將其重寫爲結構體,因爲大多數情況下我都希望通過值來複制對象。 – denine99