Der FoxPro-Kompatible Skriptinterpreter
🔎
Newsletter
Der FoxPro-Kompatible Skriptinterpreter

Makros

Mit Makros lassen sich Anweisungen formulieren, die erst zur Laufzeit Kompiliert werden.

  1
  2
  3
  4
LOCAL someAction
someAction = "? 'Hello', ' ', 'World'"
* Durch das &-Zeichen wird ein Makro gekennzeichnet
&someAction

Hello   World

Hello World

Was nicht geht

Mit Makros können keine Codepfade hinzugefügt werden:

  1
  2
  3
  4
  5
  6
  7
LOCAL else
else = "ELSE"

IF .F.
&else
  ? "Fehler"
ENDIF

Kompatiblität mit FoxPro

DO macht keine Makrosubstitution innerhalb von String-Literalen, zum Beispiel:

  1
  2
  3
  4
  5
  6
  7
  8
  9
foo = "woo" && Public variable
? get_api_call("apikey12345")

FUNCTION get_api_call(apiKey AS String)
  * FoxPro interpretiert die folgende Befehlszeile als Makro
  * und ersetzt zur Laufzeit "foo" mit "woo", was zu unerwartetem
  * Laufzeitverhalten führen kann:
  RETURN "https://www.google.de?moo=" + apiKey + "&foo=2"
ENDFUNC

https://www.google.de?moo=apikey12345&foo=2

https://www.google.de?moo=apiKey12345woo=2

DO führt in dieser Situation keine Makrosubstitution durch. Das &-Zeichen in String-Literalen wird ignoriert:

https://www.google.de?moo=apiKey12345&foo=2