Skyrim:Cast Reference

Aus Skript-Wiki
Version vom 13. August 2012, 11:56 Uhr von Keris (Diskussion | Beiträge) (Textersetzung - „tesscript>“ durch „papyrusscript>“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

<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:


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