Hola, entiendo que self es una referencia a un objeto, pero no entiendo por que no puede cambiarse, en otros lugares he usado la instrucción
Código:
VecinoParticula:=VecinoAux9.Clon;
y también
Código:
VecinoAux9:=Self.Clon;
y no he tenido ningún problema siendo VecinoParticula y VecinoAux9 instancias de la misma clases, la función Clon lo que hace es crear una compia del objeto para que no sea una referencia.
El procedimiento correspondiente es:
Código:
function clsParticula.Clon():clsParticula;
var
i:Integer; {Esta función realiza un clon independiete, elimina el uso de punteros en las instancias}
begin
Result:=clsParticula.Create;
Result.VClasificacion:=Copy(Self.VClasificacion);
Result.VCoordenadasActual:=Copy(Self.VCoordenadasActual);
Result.VCoordenasPosicionAnterior:=Copy(Self.VCoordenasPosicionAnterior);
Result.VCoordenadasMejorPosicion:=Copy(Self.VCoordenadasMejorPosicion);
Result.VDistancias:=Copy(Self.VDistancias);
Result.ValorDeLaInerciaActual:=Self.ValorDeLaInerciaActual;
Result.ValorInerciaEnMejorPosicion:=Self.ValorInerciaEnMejorPosicion;
Result.VCardinalidades:=Copy(Self.VCardinalidades);
Result.VVelocidad:=Copy(Self.VVelocidad);
//Tabu
Result.OperaRealizadaVecino:=Self.OperaRealizadaVecino;
Result.PosicionModificadaParaVecino:=Self.PosicionModificadaParaVecino;
Result.PosicionAActualizarEnLT:=Self.PosicionAActualizarEnLT;
SetLength(Result.ListaTabu,2,TamaMaxListaTabu);
Result.ListaTabu[0]:=Copy(Self.ListaTabu[0]);
Result.ListaTabu[1]:=Copy(Self.ListaTabu[1]);
Result.TamaActualLT:=Self.TamaActualLT;
Result.SeGeneroElVecino:=Self.SeGeneroElVecino;
end;
Donde result posee una copia del objeto independiente de la instancia general. Mi duda es ¿por qué no puedo cambiar el self pero si otras referencias de los objetos?, y más aún ¿cómo puedo solucionar el problema?
Saludos...