Ver Mensaje Individual
  #1  
Antiguo 16-12-2013
TecnoBestia TecnoBestia is offline
Miembro
 
Registrado: jun 2010
Posts: 35
Reputación: 0
TecnoBestia Va por buen camino
Cómo modificar una instancia dentro de un procedimiento asociado a esta.

Hola foreros.

Tengo una duda que me trabado y no he podido encontrar nada al respecto. Supongo que para muchos de ustedes es algo muy sencillo. Por lo que les pido su ayuda.

Tengo una instancia que perteneces a una clase creada por mí denominada TParticula. Luego tengo un vector llamado VEnjambre lleno de instancias del tipo TParticula.

Para la clase TParticula se le programó un procedimiento que dependiendo del resultado modifica la instancia, sin embargo este cambio no se hace.

Veamoslo en Código:
Código:
       for i:=0 to Tamano_Del_Enjambre-1 do begin
         VEnjambre[i].AplicarBusquedaTabu;
         if VEnjambre[IndiceDeLaMejorParticulaDeLaHistoria].ValorInerciaEnMejorPosicion<VEnjambre[i].ValorInerciaEnMejorPosicion then begin
           IndiceDeLaMejorParticulaDeLaHistoria:=i;
         end;
       end;
Luego en el segundo paso del procedimiento anterior corresponde al sigueinte procedimiento.

Código:
procedure TParticula.AplicarBusquedaTabu();
var
  i,IteraBT:Integer;
begin
  
  IteraBT:=0;
  SetLength(Self.ListaTabu,2,TamaMaxListaTabu);
  while IteraBT<MaxIteraSinMejorasBT do
  begin
    IteraBT:=IteraBT+1;
    Self.BTCrearVecino(BTTamaVecindario);
    if Self.SeGeneroElVecino then begin
      Self:=VecinoParticula.Clon;                    //Aquí 1
      FreeAndNil(VecinoParticula);
      if Self.ValorDeLaInerciaActual<Self.ValorInerciaEnMejorPosicion then begin
        IteraBT:=0;
        Self.ValorInerciaEnMejorPosicion:=Self.ValorDeLaInerciaActual;            //Aquí 2
        Self.VCoordenadasMejorPosicion:=Copy(Self.VCoordenadasActual);      //Aquí 3
      end;
      

    end;
  end;
end;
Tanto en Aquí 1, 2 y 3 se hacen cambios a la instancia, sin embargo al finalizar dicho procedimiento no los cambios no se ven.

Es decir, valor que sale de procedimiento AplicarBusquedaTabu es el mismo que entró y los cambios que se hacen dentro del procedimiento no se aplican fuera.

Es como si el self fuera una copia de la instancia y no una referencia a la instancia dada.

Agradezco cualquier ayuda.

Saludos...
Responder Con Cita