FunctionMap
In einer FunctionMap können Werte und Funktionen gespeichert werden, die mit einem Schlüssel verbunden sind. Ein Schlüssel kann danach direkt wie eine Funktion aufgerufen werden.
Wenn z.B. einer FunctionMap der Wert 123 mit dem Schlüssel "test" zugewiesen wird, dann kann dieser Wert mit ".test" abgerufen werden:
map = FunctionMap
map.add( "test", 123 )
map.test.print
Regeln
Der zugewiesene Wert kann jedes beliebige Objekt sein.
Der Schlüssel muss hingegen ein paar Anforderungen erfüllen, damit er als Funktion verwendet werden kann:
- Der Schlüssel muss mit einem Kleinbuchstaben (a-z) beginnen
- Nachfolgend sind nur Kleinbuchstaben, Großbuchstaben, Zahlen und Unterstrich erlaubt.
- Funktionen aus den Typen "Object" und "FunctionMap" können nicht überlagert werden.
- Ebenso dürfen Schlüssel nicht mit Funktionsnamen aus diesen Typen beginnen.
- Doppelte Einträge sind nicht erlaubt.
So ist z.B. der Schlüssel "addItem" wegen "add" aus FunctionMap verboten.
Abkürzungen
Im offenen ParserLevel können die Schlüssel auch abgekürzt verwendet werden. Die Abkürzung muss jedoch eindeutig und mindestens 3 Zeichen lang sein.
map = FunctionMap
map.add( "errors", 123 )
map.errors.print
map.err.print
FuncLet
Eine FunctionMap kann auch mit einem FuncLet verwendet werden. Ist das zugewiesene Objekt ein FuncLet, so wird es direkt ausgeführt. Benötigt die zugewiesene Funktion Argumente, so müssen diese mit übergeben werden.
::getString = "abc"
::add( Int a, Int b ) Int = a + b
map = FunctionMap
map.add( "abc", :this.getString ).add( "plus", :this.add )
map.abc.print
map.plus( 4, 6 ).print