Zum Hauptinhalt springen

Regeln für gemischte Typen

Es gibt keine allgemeine implizite Umwandlung. Jeder Operator hat eine kurze Liste von Typkombinationen, die er versteht. Jede andere Kombination löst keinen Fehler aus. Sie ergibt stillschweigend Integer 0 (bzw. false bei einem Ordnungsvergleich), und das Skript läuft weiter. Das ist Absicht, damit ein einzelner ungewöhnlicher Wert eine Aktion nicht mittendrin abbricht. Es bedeutet aber auch, dass ein falsch typisierter Ausdruck unbemerkt fehlschlägt; prüfen Sie daher mit UtilityPrint, wenn ein Ergebnis falsch aussieht.

OperatorAkzeptierte Kombinationen → ErgebnisAlles andere
+Text + Text → Text (Verkettung)
Integer + Integer → Integer
Integer/Real gemischt → Real
0
- *Integer ∘ Integer → Integer
Integer/Real gemischt → Real
0
/Integer / Integer → Integer, Richtung null abgeschnitten (-7 / 2 ist -3)
Integer/Real gemischt → Real
Division durch null → 0 oder 0.0, kein Fehler
0
== !=gleicher Typ → nach Wert verglichen (Text exakt und unter Beachtung der Groß-/Kleinschreibung, Window nach Handle)
Integer mit Real → numerisch verglichen (5 == 5.0)
nie gleich: 1 == true, "5" == 5 und w == 0 sind alle false
< <= > >=zwei Zahlen (Integer/Real gemischt erlaubt) → numerische Ordnung
Text mit Text → ordinal, unter Beachtung der Groß-/Kleinschreibung (UTF-16-Codeeinheiten: "Z" < "a")
false für alle vier, daher bedeutet !(a < b) hier nicht a >= b
&& || !beliebige Typen, über den Wahrheitswert → Bool
& | ^Integer ∘ Integer → Integer0 (ein Bool- oder Real-Operand zählt dazu: true & true ist 0)
<< >>Integer um Integer 0–63 → Integer. >> behält das Vorzeichen: -16 >> 2 ist -4.0, auch bei Verschiebungsweiten unter 0 oder über 63
unäres -Integer → Integer, Real → Real0
~Integer → Integer (~0 ist -1)0

Zwischen Typen umwandeln:

Von → NachWie
Integer → Realautomatisch bei Übergabe an einen als Real deklarierten Parameter einer integrierten Funktion; sonst n * 1.0 (jede Arithmetik mit einem Real ergibt einen Real)
Real → IntegerMathRound(r) (Hälften von null weg), MathFloor(r) oder MathCeil(r)
beliebig → TextStringFormat("{0}", value, "")
Bool → Integerif (b) n = 1; else n = 0;
Text → ZahlStringToNumber(text, false) für Benutzereingaben (im regionalen Format der Person; Zifferngruppen müssen ihm folgen, daher ist 1.5 für einen Benutzer mit Deutsch (Deutschland) keine Zahl), true für maschinellen Text (. als Dezimaltrennzeichen, keine Gruppierung). Integer bei ganzen Zahlen, sonst Real; zuerst StringIsNumber, wenn der Text möglicherweise keine Zahl ist (siehe dieses Beispiel).
Zahl → TextStringFromNumber(n, decimals, invariantCulture), decimals -1 für so viele Stellen wie nötig
Integer → Hex-TextDafür gibt es keine integrierte Funktion. Bilden Sie ihn mit Verschiebungen (siehe dieses Beispiel).