Betrachten Sie den folgenden Testfall:
%Vor% In Zeile 13 gibt der Compiler eine Nachricht mit der Fehler-Ebene aus, die alle Fälle einer solchen Verwendung lokaler Prozeduren verbietet. Die "offizielle" Lösung besteht darin, Local
-Symbol zum äußeren Geltungsbereich zu machen (dh: es zu einem Geschwister von Global
zu machen), was sich negativ auf den Code "structuredness" auswirken würde.
Ich suche den Weg, um es in anmutiger Weise zu umgehen, vorzugsweise verursacht Compiler WARNING level Nachricht.
Am besten ist es, es mit der neuen Funktion für anonyme Methoden als reference to procedure
zu deklarieren, und dann können Sie alles schön eingekapselt behalten.
Dies löst die Probleme, die Mason beschreibt, indem alle lokalen Variablen der anonymen Funktion erfasst.
Hier ist, warum Sie es nicht tun können:
%Vor%Lokale Prozeduren haben Zugriff auf den Variablenbereich der äußeren Routine. Diese Variablen werden jedoch auf dem Stack deklariert und werden ungültig, sobald die äußere Prozedur zurückkehrt.
Wenn Sie jedoch CompilerVersion 21 (Delphi 2010) verwenden, haben Sie anonyme Methoden verfügbar, die in der Lage sein sollten, zu tun, was Sie suchen; Sie brauchen nur eine etwas andere Syntax.
Wenn man in D7 oder früher wirklich lokale Prozeduren verwenden muss, könnte man diesen Trick verwenden:
%Vor%Das Problem ist jedoch, dass Adressregister auf verschiedenen Rechnern unterschiedlich sein können - also ist es notwendig, mit lokalem proc-Aufruf etwas Code zu schreiben und über den Haltepunkt zu schauen, welche Register dort verwendet werden ...
Und ja - in den meisten echten Produktionsfällen ist dieser Trick nur eine Art von Palliativ.
Tags und Links scope delphi procedural