Echa un vistazo a este sencillo clase Estoy construyendo como la base para almacenar los resultados de los algoritmos de coincidencia de cadenas:¿Por qué estos objetos no son iguales por defecto en 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);
}
}
Aquí es donde las cosas se ponen raras:
auto m1 = new Match(1), m2 = new Match(1);
writeln(m1.toHash());
writeln(m2.toHash());
writeln(m1 == m2);
impresiones
4464528
4464512
false
No veo ninguna razón por la cual estos dos objetos no se consideren iguales por defecto. Supongo que podría escribir una función personalizada toHash()
y opEquals()
, pero eso parece exagerado. De acuerdo con Andrei Alexandrescu book en el lenguaje de programación D (gran libro!), "Por defecto, el hash se calcula utilizando la representación bit a bit del objeto". ¿Alguna idea por ahí?
Gracias por el código fuente y la información. No me di cuenta == comparado por identidad por defecto. Terminé reescribiéndolo como una estructura de todos modos, ya que querré copiar el objeto por valor la mayor parte del tiempo. – denine99