Typecast/ja
LSL ポータル | 関数 | イベント | 型 | 演算子 | 定数 | 実行制御 | スクリプトライブラリ | カテゴリ別スクリプトライブラリ | チュートリアル |
値の型を変更するには型キャストが必要です。型キャストには二種類あり、それは明示的な型キャストと、暗黙の型キャストです。明示的な型キャストはプログラマ自身が指定する一方、暗黙の型キャストはコンパイラによって (自動的に) 設定されます。LSL は string 型から key 型、integer 型から float 型への暗黙の型キャストを行ないますが、それはそれぞれ後者の型が要求されている所で前者の値が渡された場合です。
可能な型キャスト | ||||||||
---|---|---|---|---|---|---|---|---|
To | ||||||||
integer | float | string | key | list | vector | rotation | ||
From | integer | x | x | x | x | |||
float | x | x | x | x | ||||
string | x | x | x | x | x | x | x | |
key | x | x | x | |||||
list | x | x | ||||||
vector | x | x | x | |||||
rotation | x | x | x |
Syntax: (type)value
value を type 型へ変換する。
• expression | type | – | variable type | |
• expression | value | – | expression or constant |
value が複数項目からなる式の場合は、それらを括弧 "()" で囲んでおくのが良いでしょう。 (type)(value)
Examples
<lsl> string a = "1.5"; float b = (float)a; integer c = (integer)a;
integer i; i = (integer) 1.23; // 1 i = (integer) -1.23; // -1 i = (integer) "0123"; // 123 i = (integer) "0x12A"; // 298
float f; f = (float) "6.2e1"; // 62.0 // "6.2e1", "6.2e+1", "6.2E1", "6.2E+1" are all equivalent.
string s; s = (string) [1, 2.3, "a"]; // "12.300000a" s = (string) <1.0, 2.3, 4.56>; // "<1.00000, 2.30000, 4.56000>"
list l; l = (list) ""; // [""] l = (list) <1.0, 2.3, 4.56>; // ["<1.00000, 2.30000, 4.56000>"]
vector v; v = (vector) "<1.0, 2.3, 4.56>"; // <1.0, 2.3, 4.56> v = (vector) "<1.0, 2.3>"; // ZERO_VECTOR (値が不完全なため)
rotation r; r = (rotation) "<1.0, 2.3, 4.56, 1.0>"; // <1.0, 2.3, 4.56, 1.0> r = (rotation) "<1.0, 2.3, 4.56>"; // ZERO_ROTATION (値が不完全なため) </lsl>
Example n°2
<lsl> integer BOOT_TIME; float BOOT_TIME_2; string BOOT_T ; string BOOT_CHAN;
default
{
state_entry() { BOOT_TIME = llGetUnixTime(); BOOT_T = (string)BOOT_TIME; BOOT_TIME_2 = llGetTimeOfDay(); BOOT_CHAN = (string)BOOT_TIME_2; llSetObjectDesc( BOOT_T); llSetText(BOOT_CHAN,<1.0,0.0,0.0>,1.0); }
} </lsl>
Caveats
- 明示的な型キャストは、本来それが不要な場所でも指定可能で、コンパイラはそれについて最適化しません。無用な型キャストはコード分量を増やし、実行速度も下がります。
Notes
- 配列中の要素を取得するには llList2* 関数を使ってください。