関数は、関数定義式を使って MAXScript の中で定義することができます。
<function_def>
の構文は次のとおりです。
[mapped] ( function | fn) <name> { <parameter> } = <expr>
<name>
は関数の名前です。
<parameter>
のオプションは以下のいずれかです。
<name>
<name>: [<operand>] --keyword parameter with optional default value
等号記号「'='
」の後の <expr>
は、関数の本体です。
関数 <name>
は、関数を表す値を入れる変数の名前を付けるのに使用されます。
関数を名前で呼び出すと、名前の変数の定義をアクセスすることになります。
関数名の変数のスコープは、現在の MAXScript スコープと同じです。
関数のパラメータは位置パラメータ か キーワードのいずれかです。
位置パラメータは単純な <name>
で定義され、任意のキーワード パラメータの前に指定することが必要です。
キーワード パラメータには名前の後に ':' ( コロン )が付き、その後にオプションの既定値が続きます。関数の呼び出し元は、オプションとして任意の順にキーワード引数を指定できます。キーワードが指定されない場合は既定値に設定され、既定値が指定されていない場合は特殊値 unsupplied
に設定されます。
mapped
プレフィックスを使用すると、該当する関数はコレクションに自動的に割り当てられます。
つまり、関数への最初の引数としてコレクションが指定された場合、関数はコレクションの要素上で自動的に繰り返し呼び出されます。
これにより、コピー、削除、移動など割り当てられた組み込み関数と同じように動作するスクリプト関数を定義できるようになり、これをオブジェクト セット、パス名パターン、または配列に適用することができます。
詳細は、「コレクション」を参照してください。
例
function my_add a b = a + b fn factorial n = if n <= 0 then 1 else n * factorial (n - 1) mapped function rand_color x = x.wireColor = random (color 0 0 0) (color 255 255 255) fn starfield count extent:[200,200,200] pos:[0,0,0] = ( local f = pos - extent / 2, t = pos + extent / 2 for i = 1 to count do sphere name: "star"\ radius:(random 0.1 2.0) \ position:(random f t) \ segs:4 smooth:false )
スクリプト関数は関数の値として本体 <expr>
の値を返します。本体がブロック式の場合、関数はブロックの最後の式の値に評価します。
factorial
関数のように、関数は再帰的に呼び出す(その関数自身を呼び出す)ことができます。
スクリプト関数のソースを検索する必要がある場合は、showSource()
関数を使用します。これにより、この関数が定義されたソース ファイルを含んでいるスクリプト エディタを表示し、関数の定義に位置付けられます。
形式は次のとおりです。
showSource <fn>
これは、複数のスクリプト ファイルで定義されていた可能性のある多数のスクリプト関数を使用する場合、参照の定義に便利です。