Funktionen / Flexible Anzahl an Argumenten

Flexible Anzahl an Argumenten

Die meisten Funktionen benötigen eine feste Anzahl an Argumenten. Mit Vorgabe-Werten ist die Anzahl der Argumente in gewisser Weise auch flexibel, jedoch ist die maximale Anzahl der Argumente damit immer begrenzt. Um wirklich eine flexible Anzahl an Werten übergeben zu können, werden "VarArgs" (variable Arguments) verwendet.

Bei der Definition einer Funktion wird hierzu an die letzte Parameter-Variable 3 Punkte angehängt. Dies signalisiert, dass hier eine variable Anzahl übergeben werden kann.

::test( values... )

Dies lässt sich natürlich mit Typ-Definitionen und anderen Parametern erweitern.

::test( Int foo, Str s = "abc", Char values... )

Sogar die Kombination mit Vorgabe-Werten ist möglich! Der letzte und flexible Parameter greift allerdings erst, wenn alle vorherigen Parameter gesetzt wurden.

An diese Funktion ließen sich nun z.B. folgende Argumente übergeben:

this.test( 3 )
this.test( 3, "bla" )
this.test( 3, "bla", 'x' )
this.test( 3, "bla", 'x', 'y' )
this.test( 3, "bla", 'x', 'y', 'z' )

Bei den ersten beiden Aufrufen wird "values" nur eine leere Liste enthalten.

Übergabe der Werte als Liste

Angenommen, es existiert eine Liste mit vielen Elementen, die an eine Funktion mit flexiblen Argumenten übergeben werden soll. Wird die Liste direkt übergeben, so wird die Liste selbst als Objekt übernommen. Um den Inhalt der Liste an die Funktion zu übergeben, wird eine Referenz auf diese Liste benötigt ... ein VarLet.

::foo( values... )
	values.print.type.print
liste = [ 9,6,2,7,5,9,4,3 ]
this.foo( 'a' )
this.foo( 3,5,7 )
this.foo( liste )
this.foo( :liste )
this.foo( [ 9,6,2,7,5,9,4,3 ] )
this.foo( [ 9,6,2,7,5,9,4,3 ].varlet )
  1. . Aufruf: Es wird ein einzelner Wert übergeben
  2. . Aufruf: Es werden 3 Werte übergeben
  3. . Aufruf: Es wird über die Variable eine Liste im gesamten als ein einzelnes Objekt übergeben
  4. . Aufruf: Hier wird eine Referenz auf die Liste und damit alle enthaltenen Werte übergeben
  5. . Aufruf: Es wird eine Liste direkt und als ein einzelnes Objekt übergeben
  6. . Aufruf: Es wird eine temporäre Variable und ein VarLet zu dieser Liste erzeugt.

VarLet - Jederzeit zur Stelle

Mit der Objekt-Funktion ".varlet" kann aus jedem Objekt direkt ein Varlet mit Verweis auf eine temporäre Variable erzeugt werden.

Dies erspart das Zuweisen zu einer Variable:

::foo( values... )
	values.print
liste = [ 9,6,2,7,5,9,4,3 ]
this.foo( liste.cut( 3, 5 ).map( each * 2 ).varlet )
- Powered by OghsWiki -

 

 

Unterstützen

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

Erhalten:  0 €