Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Inline Variablen-Deklaration bei try..except

  Alt 14. Apr 2014, 12:44
Ja, ein bissl komisch ist das schon, aber im Prinzip ist das hier nur ein "lokaler" gecasteter Alias für Delphi-Referenz durchsuchenSystem.ExceptObject (aktuelles Exception-Objekt).

Stell es dir als eine Art Makro vor, welches intern die Variablen anlegt, vergleicht und castet.

Delphi-Quellcode:
begin
  try
    // böses Zeug
  except
    on E: EFileNotFoundException do
      E.Kaputt;
    on E: EProgrammerNotFound do
      E.FaulerSack;
    else
      raise;
  end;
end;
Delphi-Quellcode:
begin
  try
    // böses Zeug
  except
    if ExceptObject is EFileNotFoundException then
      EFileNotFoundException(ExceptObject).Kaputt
    else if ExceptObject is EProgrammerNotFound then
      EProgrammerNotFound(ExceptObject).FaulerSack
    else
      raise;
  end;
end;
Delphi-Quellcode:
var
  E: EFileNotFoundException;
  E2: EProgrammerNotFound;
begin
  try
    // böses Zeug
  except
    if ExceptObject is EFileNotFoundException then begin
      E := EFileNotFoundException(ExceptObject);
      E.Kaputt;
    end else if ExceptObject is EProgrammerNotFound then begin
      E2 := EProgrammerNotFound(ExceptObject);
      E2.FaulerSack;
    end else
      raise;
  end;
end;
Delphi legt ja auch so öfters mal "unsichtbare" lokale Variablen an,
sei es bei a := b + c * d , wo das Ergebnis von c*d ja quasi in einer Zwischenvariable landet,
oder der Enumerator einer For-In-Schleife und vorallem beim with .
$2B or not $2B

Geändert von himitsu (14. Apr 2014 um 12:48 Uhr)
  Mit Zitat antworten Zitat