Skyrim:Cast Reference: Unterschied zwischen den Versionen
Keris (Diskussion | Beiträge) K |
Keris (Diskussion | Beiträge) K (Textersetzung - „tesscript>“ durch „papyrusscript>“) |
||
Zeile 34: | Zeile 34: | ||
=== Beispiele=== | === Beispiele=== | ||
− | < | + | <papyrusscript> |
; x wird true | ; x wird true | ||
x = 1 as bool | x = 1 as bool | ||
− | </ | + | </papyrusscript> |
<br> | <br> | ||
− | < | + | <papyrusscript> |
; x wird false | ; x wird false | ||
x = "" as bool | x = "" as bool | ||
− | </ | + | </papyrusscript> |
<br> | <br> | ||
− | < | + | <papyrusscript> |
; x wird true | ; x wird true | ||
x = new int[5] as bool | x = new int[5] as bool | ||
− | </ | + | </papyrusscript> |
== Casten in einen Int == | == Casten in einen Int == | ||
Zeile 54: | Zeile 54: | ||
Floats und Strings können in einen Iinteger gecastet werden. Fließkomma-Werte werden abgeschnitten und Strings werden in ihre Integer-Repräsentation konvertiert, wenn es eine gibt (sonst 0) | Floats und Strings können in einen Iinteger gecastet werden. Fließkomma-Werte werden abgeschnitten und Strings werden in ihre Integer-Repräsentation konvertiert, wenn es eine gibt (sonst 0) | ||
=== Beispiele=== | === Beispiele=== | ||
− | < | + | <papyrusscript> |
; x wird 10 | ; x wird 10 | ||
x = 10.5 as int | x = 10.5 as int | ||
− | </ | + | </papyrusscript> |
<br> | <br> | ||
− | < | + | <papyrusscript> |
; x wird 5 | ; x wird 5 | ||
x = "5 little dwarves!" as int | x = "5 little dwarves!" as int | ||
− | </ | + | </papyrusscript> |
== Casten in einen Float == | == Casten in einen Float == | ||
Zeile 70: | Zeile 70: | ||
=== Beispiele=== | === Beispiele=== | ||
− | < | + | <papyrusscript> |
; x wird 15.0 | ; x wird 15.0 | ||
x = 15 as float | x = 15 as float | ||
− | </ | + | </papyrusscript> |
<br> | <br> | ||
− | < | + | <papyrusscript> |
; x wird 10.34 | ; x wird 10.34 | ||
x = "10.34" as float | x = "10.34" as float | ||
− | </ | + | </papyrusscript> |
== Casten in Strings == | == Casten in Strings == | ||
Zeile 109: | Zeile 109: | ||
=== Beispiele=== | === Beispiele=== | ||
− | < | + | <papyrusscript> |
; x wird "15" | ; x wird "15" | ||
x = 15 as string | x = 15 as string | ||
− | </ | + | </papyrusscript> |
<br> | <br> | ||
− | < | + | <papyrusscript> |
; x wird "[0, 0, 0]" | ; x wird "[0, 0, 0]" | ||
x = new int[3] as string | x = new int[3] as string | ||
− | </ | + | </papyrusscript> |
== Casten zu einem Objekt == | == Casten zu einem Objekt == | ||
Zeile 125: | Zeile 125: | ||
=== Beispiele=== | === Beispiele=== | ||
− | < | + | <papyrusscript> |
; x bekommt das Parent-Objekt | ; x bekommt das Parent-Objekt | ||
x = ChildVariable as ParentObject | x = ChildVariable as ParentObject | ||
− | </ | + | </papyrusscript> |
<br> | <br> | ||
− | < | + | <papyrusscript> |
; x bekommt das Child-Objekt, wenn es eines gibt, sonst None | ; x bekommt das Child-Objekt, wenn es eines gibt, sonst None | ||
x = ParentVariable as ChildObject | x = ParentVariable as ChildObject | ||
− | </ | + | </papyrusscript> |
== Casten zu einem Array == | == Casten zu einem Array == | ||
Zeile 144: | Zeile 144: | ||
=== Beispiele=== | === Beispiele=== | ||
− | < | + | <papyrusscript> |
Weapon Property MyUberWeapon auto | Weapon Property MyUberWeapon auto | ||
Zeile 155: | Zeile 155: | ||
EndEvent | EndEvent | ||
− | </ | + | </papyrusscript> |
Wenn man aber nur den Typ des Objekts feststellen will, könnte man ebenso ein Schlüsselwort nutzen: | Wenn man aber nur den Typ des Objekts feststellen will, könnte man ebenso ein Schlüsselwort nutzen: | ||
− | < | + | <papyrusscript> |
Keyword Property IsAnArrow auto | Keyword Property IsAnArrow auto | ||
Zeile 169: | Zeile 169: | ||
EndEvent | EndEvent | ||
− | </ | + | </papyrusscript> |
Aktuelle Version vom 13. August 2012, 11:56 Uhr
<cast> ::= <expression> 'as' <type>
Das englische ‚to cast‘ bedeutet (u.a.) jemandem eine Rolle zu geben. In der Programmierung wird damit Zuweisen eines anderen Typs (oder Zuweisen zu einem anderen Typ) gemeint. Im weiteren Text wird der in der Programmierung gebräuchliche englische Begriff benutzt.
Das Casten eines Ausdrücken von einem Typ in einen anderen erlaubt es, zusätzliche Manipulationen an einem Objekt auszuführen oder diesen einer Funktion oder Property zu übergeben, die einen anderen Typen erwarten. Die verschiedenen Möglichkeiten des Castens sind unten aufgeführt:
Inhaltsverzeichnis
Casten in einen Boolean
Compiler auto-cast from: Anything
Alles in Papyrus kann in einen Boolean gecastet werden. Das Ergebnis, das man erhält, ist abhängig vom Typ des Objekts, das gecastet wird, wie die folgende Tabelle angibt.
Typ des Ausdrucks | boolesches Ergebnis |
---|---|
Int | True wenn der Integer nicht null ist |
Float | True wenn der Float nicht null ist (unter Berücksichtigung eines kleinen epsilon) |
String | True wenn der String nicht leer ist |
Objects | True wenn das Objekt nicht None ist |
Arrays | True wenn die Größe des Arrays 1 Element oder mehr beträgt |
Beispiele
<papyrusscript>
- x wird true
x = 1 as bool
</papyrusscript>
<papyrusscript>
- x wird false
x = "" as bool
</papyrusscript>
<papyrusscript>
- x wird true
x = new int[5] as bool </papyrusscript>
Casten in einen Int
Compiler auto-cast from: Nothing
Floats und Strings können in einen Iinteger gecastet werden. Fließkomma-Werte werden abgeschnitten und Strings werden in ihre Integer-Repräsentation konvertiert, wenn es eine gibt (sonst 0)
Beispiele
<papyrusscript>
- x wird 10
x = 10.5 as int
</papyrusscript>
<papyrusscript>
- x wird 5
x = "5 little dwarves!" as int </papyrusscript>
Casten in einen Float
Compiler auto-cast from: Int
Integer und Strings können in einen Float gecastet werden. Integer werden einfach ihr Fließkomma-Äquivalent und Strings werden in ihre Float-Repräsentation konvertiert, wenn es eine gibt (sonst 0.0)
Beispiele
<papyrusscript>
- x wird 15.0
x = 15 as float
</papyrusscript>
<papyrusscript>
- x wird 10.34
x = "10.34" as float </papyrusscript>
Casten in Strings
Compiler auto-cast from: Anything
Alles kann in einen String gecastet werden. Das Ergebnis, das man erhält, ist abhängig vom Typ des Objekts, das gecastet wird, wie die folgende Tabelle angibt.
Typ des Ausdrucks | Ergebnis-String |
---|---|
Bool | "True" oder "False" abhängig vom Wert |
Int | Die String-Version des Integers |
Float | Die String-Version des Floats |
Objekte | Eine String-Repräsentation des Objekts im Format: "[ScriptName <EditorID (FormID)>]" |
Arrays | Eine Liste von Elementen im Array getrennt durch Kommata, formatiert wie oben, eventuell mit "..." abgeschnitten, wenn ist zu lang für den internen String-Buffer ist. |
Beispiele
<papyrusscript>
- x wird "15"
x = 15 as string
</papyrusscript>
<papyrusscript>
- x wird "[0, 0, 0]"
x = new int[3] as string </papyrusscript>
Casten zu einem Objekt
Compiler auto-cast from: Child object
Nur andere Objekte können zu einem Objekt gecastet werden und auch nur wenn das Objekt ein direktes Child oder Parent desjenigen ist, das gecastet wird. Wenn man vom Parent-Objekt zum Child-Objekt castet, mag das Casten nicht gelingen, wenn es nicht aktuell eine Instanz des Child-Objekts ist. In diesem Fall ist das Ergebnis None.
Beispiele
<papyrusscript>
- x bekommt das Parent-Objekt
x = ChildVariable as ParentObject
</papyrusscript>
<papyrusscript>
- x bekommt das Child-Objekt, wenn es eines gibt, sonst None
x = ParentVariable as ChildObject </papyrusscript>
Casten zu einem Array
Compiler auto-cast from: Nothing
Nichts kann zu einem Array gecastet werden, nicht einmal andere Arrays, bei denen die Basis-Typen normalerweise funktionieren würden.
Casten zu unterschiedlichen Typen
Das Casten zu unterschiedlichen Typen kann sinnvoll sein, d.h. wenn man den Typ eines Objektes wissen will, dass eine Triggerzone getriggert hat. Man kann aber z.B. eine ObjectReference nicht zu einer Waffe casten. In diesem Fall kann man mit dem "Form"-Typ arbeiten.
Beispiele
<papyrusscript> Weapon Property MyUberWeapon auto
OnTriggerEnter(ObjectReference Type)
Weapon triggeredWeapon = (type as form) as weapon ; Castet das getriggerte Objekt erst zu einer Form und dann zu einer Waffe. if(triggeredWeapon == MyUberWeapon)
; wenn triggeredWeapon gleich MyUberWeapon mache etwas.
endif
EndEvent </papyrusscript>
Wenn man aber nur den Typ des Objekts feststellen will, könnte man ebenso ein Schlüsselwort nutzen:
<papyrusscript> Keyword Property IsAnArrow auto
OnTriggerEnter(ObjectReference Type)
if(type.haskeyword(IsAnArrow))
; wenn der Objekttyp unser Schlüsselwort hat, mache etwas.
endif
EndEvent </papyrusscript>
Links
- Cast Reference (das englische Original des obigen Artikels)