Magisch / Magische Variable "cur"

Magische Variable "cur"

"cur" ist die Abkürzung von "current", also "aktuell", oder "derzeitig".

Werden Argumente an eine Funktion übergeben, so kann bei dieser Übergabe auf das Objekt zugegriffen werden, dessen Funktion gerade aufrufen wird.

... alles klar? 😉

Erklärung

4.print

Hier wird die Funktion ".print" vom Integer-Objekt "4" ausgeführt. Somit ist aus Sicht der Funktion ".print" die "4" das gerade verarbeitete und aktuelle Objekt.

Nun lässt sich der Print-Funktion auch ein Argument übergeben, das anstelle des aktuellen Objekt's ausgegeben werden soll.

4.print( 2 * 6 )

Hier wird somit das Ergebnis von 2 * 6 ( = 12 ) ausgegeben, der Rückgabewert ist weiterhin 4.

Mit der magischen Variable "cur" ( Kurzform "$" ) lässt sich nun auf das aktuelle Objekt (die 4) zugreifen:

4.print( cur * 6 )

"cur" wird also mit dem Integer-Objekt "4" ersetzt, das ausgegebene Ergebnis ist somit 24 (also 4*6)! Der Rückgabewert von ".print" bleibt unverändert 4.

Hier ein paar Beispiele, wie dies verwendet werden kann:

4.print( cur + " = Aktueller Wert" )
5.print( cur.type ).add( 3 ).print
1.proc( cur * 3 + 2 ).print

"cur" ist vor allem für ".proc" und ".tee" wichtig. Dazu mehr unter "Proc & Tee".

Aber aufgepasst!

4.print( "Wert: " + cur )

Die Ausgabe ist in diesem Fall:

Wert: Wert:

Warum?

Wird der Befehl vollständig ausgeschrieben, so wird schnell klar was hier passiert:

4.print( "Wert: " +( cur ) )

Das "+" ist eine ganz normale Funktion. Und hier wird "cur" als Argument übergeben. Noch deutlicher wird es, wenn das "+" durch den Alias ".add" ersetzt wird.

4.print( "Wert: ".add( cur ) )

Dies ist die gleiche Funktion, nur mit anderer Priorität was in diesem Beispiel keine Rolle spielt.

Da "cur" immer das aktuelle Objekt zurückgibt, so ist dies aus Sicht der Funktion ".add" bzw. "+" der String "Wert: "!

Eine mögliche Lösung ist, die Funktion ".proc" zu verwenden und den Wert von "cur" in einer Variable abzulegen.

4.print( cur.proc( :a, "Wert: " + a) )

Anwendungs-Beispiel

b = Swing_Button( "Foo" )
b::@select
	b.text = cur.text.add( "bar" )

Swing_Main.size(400,200).add(b).run
- Powered by OghsWiki -

 

 

Unterstützen

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

Erhalten:  0 €