Experimentiell / Multi-Call

Multi-Call

Mit Multi-Call lässt sich eine Funktion über die Argumente mehrfach und auch mit verschiedenen Werten aufrufen.

Ein Multi-Call wird durch 3 Punkte am Ende eines Arguments, welches eine Schleife enthalten muss, signalisiert.

this.print( 3.times... )

Da der Funktion ".print" ein Argument übergeben werden kann, eignet sich diese gut als Beispiel.

Als Ergebnis wird hier von 1 bis 3 gezählt und mit jeder Zahl die Print-Funktion aufgerufen:

1
2
3

Effektiv geschieht folgendes:

this.pass
	it.print( 1 )
	it.print( 2 )
	it.print( 3 )

In diesem Beispiel wird das "Basis-Objekt" "this" ignoriert.

Aktuelles Objekt

Mit "cur" ist es möglich, das aktuelle Objekt zu verwenden.

3.print( cur.times... )

Hier wird die 3 mit "cur" an das Argument übergeben und damit die "times"-Funktion ausgeführt.
Die Ausgabe ist somit ebenfalls:

1
2
3

Eigene Funktion

Ebenso lässt sich damit eine selbst definierte Funktion mehrfach aufrufen:

::test( Int a )
	"Called with {}!".fill( a ).print
this.test( 5.times... )

Vergleich zu Java-Lambda

Als Beispiel wird folgender Fall angenommen:
Es existieren 2 Tabellen mit gleicher Breite, wobei alle Zeilen aus Tabelle 1 in die Tabelle 2 eingefügt werden sollen.

In Java würde dies vielleicht so aussehen:

this.table1.forEach( a -> table2.add(a) );

In JayMo ließe sich dafür direkt die Funktion ".addAll" verwenden:

table1.addAll( table2 )

Aber zum Vergleich soll das Java-Beispiel nachgebaut werden.

Wird "table1" als Basis-Objekt verwendet, so würde der Befehl wie folgt aussehen:

table1.each.proc( :a, table2.add(a) )

Dreht man den Aufruf jedoch um und nutzt Multi-Call, so ergibt sich eine wesentlich kürzere Schreibweise:

table2.add( table1.each... )
- Powered by OghsWiki -

 

 

Unterstützen

Die Entwicklung von "JayMo" wird derzeit nur durch Eigeninitiative ermöglicht.

Erhalten:  0 €