Typecast/ja

From Second Life Wiki
Jump to: navigation, search

値の型を変更するには型キャストが必要です。型キャストには二種類あり、それは明示的な型キャストと、暗黙の型キャストです。明示的な型キャストはプログラマ自身が指定する一方、暗黙の型キャストはコンパイラによって (自動的に) 設定されます。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

valuetype 型へ変換する。

• 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

  • list 変数の要素を取得するには llList2* 関数を使ってください。