Ich möchte Pushbuttons in einer Schleife erstellen.
Dabei sollte der Schleifenzähler im ACTION Codeblock verarbeitet werden.
Das klappt aber nicht
Hier im Bsp. ist len(aDVRTemp21) = 4 .
In der Funktion wird beim Abfragen für x immer 5 angezeigt.
Das ist allerdings quick and dirty, und es hat Nachteile. PRIVATEs kosten etwas Performance und können negative Auswirkungen haben, wenn sie in mehreren Funktionen verwendet werden, wenn diese einander aufrufen, auch indirekt. Außerdem werden Syntaxfehler in Codeblöcken, die man auf diese Weise baut, erst zur Laufzeit gefunden. Schlimmstenfalls liefert man Syntaxfehler aus.
Bei "detached locals" löst man Variablen aus ihrem direkten Kontext. Georgs Beispiel im Wiki ist sehr anschaulich. Wenn man den Funktionsaufruf direkt in der Schleife verwendet, wird er erst evaluiert, wenn der Eintrag im Menü evaluiert wird, und da steht der Zähler dann schon auf einem ganz anderen Wert (und für alle so erzeugten Menüeinträge auf dem gleichen!). Lagert man ihn allerdings seinerseits in eine Funktion um und verwendet ihr Ergebnis, hat man die Variablen aus der Schleife gelöst und sozusagen in die Starre der Auswertung gezwungen. Das ist sehr viel eleganter, hat Performancevorteile (vom Overhead der zusätzlich benötigten Funktion abgesehen) und führt auch nicht erst zur Laufzeit zu Syntaxfehlermeldungen.