Category:ユーザ定義関数
Jump to navigation
Jump to search
LSL ポータル | 関数 | イベント | 型 | 演算子 | 定数 | 実行制御 | スクリプトライブラリ | カテゴリ別スクリプトライブラリ | チュートリアル |
LSL ではユーザ定義関数を扱えます。構文は非常にシンプルです:
<lsl>
return_type variable_name(par1type par1name, par2type par2name,...)
{ function_statements; . . . return value_of_return_type; }
</lsl>
"function" や "def" といったキーワードや、関数の型/継承を指定する必要はありません。引数の数や組み合わせにどのような制限が (もしあれば) あるのか、私はまだ知りません。下の例のように、引数の型はまちまちで構いません。list 型を戻り値にできますので、一つの関数が複数の値を含めたリストを返せます。ユーザ定義関数によってスクリプトは簡潔で読みやすくなり、基本的なコードの再利用が可能になります。LSL スタイルガイドでは、ユーザ定義関数は default ステートの前、ユーザ定義変数の後に置かれるべきとしています。ユーザ定義関数を最初のステートの後に記述すると、Syntax Error になるでしょう。
簡単な例を 2 つ挙げます:
<lsl>
float xsquared(float x) // 引数の二乗を返します {
return x*x;
}
vector scalarmult(vector vIn, float sMult) // スカラーとベクトルの積を返します {
vIn.x=vIn.x*sMult; vIn.y=vIn.y*sMult; vIn.z=vIn.z*sMult; return vIn;
}
default {
state_entry() { llWhisper(0, "Some user functions"); }
touch_start(integer total_number) { float testx=3; llWhisper(0,"testx squared :"+(string)xsquared(testx)); vector testVector = <1,2,3>; testVector = scalarmult(testVector,testx); llWhisper(0,"test vector is:"+(string)testVector); }
}
</lsl>