Skyrim:Cast Reference: Unterschied zwischen den Versionen
Keris (Diskussion | Beiträge) K (Die Seite wurde neu angelegt: ==Links== {{Übersetzung|ckwiki|Cast Reference}} Cast Reference Cast Reference [[Category:Papyrus Sprachreferenzen|C...) |
Keris (Diskussion | Beiträge) K (Textersetzung - „tesscript>“ durch „papyrusscript>“) |
||
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
+ | <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. | ||
+ | |||
+ | <div class=edztable> | ||
+ | {| | ||
+ | ! 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 | ||
+ | |} | ||
+ | </div> | ||
+ | |||
+ | === Beispiele=== | ||
+ | <papyrusscript> | ||
+ | ; x wird true | ||
+ | x = 1 as bool | ||
+ | </papyrusscript> | ||
+ | <br> | ||
+ | <papyrusscript> | ||
+ | ; x wird false | ||
+ | x = "" as bool | ||
+ | </papyrusscript> | ||
+ | <br> | ||
+ | <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> | ||
+ | <br> | ||
+ | <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> | ||
+ | <br> | ||
+ | <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. | ||
+ | |||
+ | |||
+ | <div class=edztable> | ||
+ | {| | ||
+ | ! 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. | ||
+ | |} | ||
+ | </div> | ||
+ | |||
+ | === Beispiele=== | ||
+ | <papyrusscript> | ||
+ | ; x wird "15" | ||
+ | x = 15 as string | ||
+ | </papyrusscript> | ||
+ | <br> | ||
+ | <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> | ||
+ | <br> | ||
+ | <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== | ==Links== | ||
{{Übersetzung|ckwiki|Cast Reference}} | {{Übersetzung|ckwiki|Cast Reference}} | ||
Zeile 5: | Zeile 179: | ||
[[Category:Scripting Wissen|Cast Reference]] | [[Category:Scripting Wissen|Cast Reference]] | ||
[[Category:Papyrus Sprachreferenzen|Cast Reference]] | [[Category:Papyrus Sprachreferenzen|Cast Reference]] | ||
− |
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)