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.
| Operator | Akzeptierte Kombinationen → Ergebnis | Alles 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 → Integer | 0 (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 → Real | 0 |
~ | Integer → Integer (~0 ist -1) | 0 |
Zwischen Typen umwandeln:
| Von → Nach | Wie |
|---|---|
| Integer → Real | automatisch bei Übergabe an einen als Real deklarierten Parameter einer integrierten Funktion; sonst n * 1.0 (jede Arithmetik mit einem Real ergibt einen Real) |
| Real → Integer | MathRound(r) (Hälften von null weg), MathFloor(r) oder MathCeil(r) |
| beliebig → Text | StringFormat("{0}", value, "") |
| Bool → Integer | if (b) n = 1; else n = 0; |
| Text → Zahl | StringToNumber(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 → Text | StringFromNumber(n, decimals, invariantCulture), decimals -1 für so viele Stellen wie nötig |
| Integer → Hex-Text | Dafür gibt es keine integrierte Funktion. Bilden Sie ihn mit Verschiebungen (siehe dieses Beispiel). |