Ver Mensaje Individual
  #3  
Antiguo 17-12-2013
TecnoBestia TecnoBestia is offline
Miembro
 
Registrado: jun 2010
Posts: 35
Reputación: 0
TecnoBestia Va por buen camino
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...
Responder Con Cita