Atomare upgrades
Im offenen Parser-Level (Standard) werden atomare Typen automatisch in einen größeren Typ umgerechnet.
Long l = 123
l = 45b
Describe l
In diesem Beispiel speichert die Variable "l" nur den Typ "Long". Somit muss ein zugewiesenes Objekt zwingend vom Typ "Long" sein.
Da sich ein Byte aber verlustfrei und klar in den Typ "Long" umwandeln lässt, erfolgt dies hier automatisch.
Beispiele
Hier wird eine Ganzzahl in den Typ "Dec" umgewandelt:
e = 12.345
e = 89
Describe e
Umwandlung vom Typ "Short" in den Typ "Dec":
DecNumber d = 123s
Describe d
Umwandlung von "Char", "Int", "Dec" zu "Str": s = "foo" Describe s s = 'x' Describe s s = 123 Describe s s = 456.789 Describe s
Funktionen und Konstruktoren
Auch bei der Übergabe von atomaren Werten an eine Funktion oder eine neue Instanz, wird der Typ ggf. umgerechnet.
::foo( Str s )
Describe s
this.foo( 123 )
Grenzen
Wichtig:
Zulässig sind nur verlustfreie und klare Upgrades.
Byte b = 12l
Da die Zahl 12 gut in den Bereich vom Typ "Byte" (-128 bis 127) passt, ist einerseits eine klare Umwandlung möglich. Jedoch hat der Typ "Long" einen sehr viel größeren Zahlenbereich, weshalb dieses Downgrade somit nicht automatisch durchgeführt und ein Fehler geworfen wird.
In diesem Fall muss die Umwandlung explizit vorgenommen werden:
Byte b = 12l.toByte
Unterbinden
Der JayMo-Parser bietet verschiedene Level mit strengeren Regeln an. Bereits ab dem Level "low" wird das automatische Upgrade deaktiviert:
>low