Lockern Sie die "Lokale Prozedur / Funktion, die Prozedurvariable zugewiesen wird" Einschränkung

8

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.

    
Free Consulting 18.02.2011, 18:13
quelle

4 Antworten

8

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.

%Vor%

Dies löst die Probleme, die Mason beschreibt, indem alle lokalen Variablen der anonymen Funktion erfasst.

    
David Heffernan 18.02.2011 18:25
quelle
5

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.

    
Mason Wheeler 18.02.2011 18:25
quelle
1

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.

    
Markus_13 29.02.2016 08:10
quelle
0

Für die Aufzeichnungen, meine Homebrewn Schließung:

%Vor%     
Free Consulting 18.02.2011 20:56
quelle

Tags und Links