プライベート変数
エンジンはアンダースコア(_)で始まる値を自動的にプライベート変数と解釈する。通常の英数字A~Z、a~z、0~9と_が値の名前に使える。ということで_hello、_HELLO_WORLD2000、_____hello、_123、____123_______helloは全て使用できるし、プライベート変数として解釈される。プライベート変数はスコープ(訳注:スコープ scopeは{}の中身だと思っていただければ大体間違いはないと思います)の中で定義されたとき、スコープが終了した時に削除される。従ってスコープ内のプライベート変数はスコープの外では未定義だ。
1 2 3 4 5 6 | //_iは未定義、nil if true then { //スコープ開始 _i = 1; //_iを定義 //_iは1 }; //スコープ終了 //スコープが終了したためここでは_iは未定義 |
1 2 3 4 5 6 7 8 9 10 | _i = 1; if true then { //_iは1、定義済 if true then { //_iは1、定義済 if true then { //_iは1、定義済 }; }; }; |
1 2 3 4 5 | private "_a" ; private "_b" ; private "_c" ; //上は下と同じ private [ "_a" , "_b" , "_c" ]; |
1 2 3 4 5 6 7 8 9 10 11 | hint format [ "%1" , _i]; //"any"(=未定義) _i = 1; hint format [ "%1" , _i]; //"1" if true then { hint format [ "%1" , _i]; //"1" private "_i" ; hint format [ "%1" , _i]; //"any"(=未定義) _i = 2; hint format [ "%1" , _i]; //"2" }; hint format [ "%1" , _i]; //"1" |
特殊プライベート変数
この記事を見てほしい。特定の命令を実行した時、命令スコープ内でしか存在できない特殊変数を作成し命令の特殊値を代入する。スコープ内でしか存在できないのはエンジンは変数を作成するときにprivateを実行するためだ。
1 2 3 4 5 6 | //最初のループにおいて { { hint str _x; //_xは1 } forEach _x; //_xは[1,2,3] } forEach [[1,2,3],[4,5,6],[7,8,9]]; |
1 2 3 4 5 6 7 8 | //最初のループにおいて { _x2 = _x; { hint str _x; //_xは1 hint str _x2; //_x2は[1,2,3] } forEach _x; } forEach [[1,2,3],[4,5,6],[7,8,9]]; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | _function = { _var = _var + 1; }; _var = 10; call _function; hint str _var; //_varは11 _var = 100; //_varは別の場所で定義済 function = { private "_var" ; _var = _this select 0; _var = _var + 1; _var }; hint str ([10] call function); //返り値は11、_varは100のまま |
Enjoy,
KK
KK's blog – ArmA Scripting Tutorials: Variables (Part 1) by Killzone Kid
Translated by POLPOX
Translated by POLPOX
0 件のコメント :
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。