MAXScript は参照パラメータの引き渡しをサポートしています。これにより、参照を呼び出し元のコンテキスト内の変数、プロパティ、または配列要素に、関数のパラメータとして渡すことができます。また、呼び出される関数のパラメータに対する割り当ては、すべて呼び出し元の変数、プロパティ、または配列要素に直接割り当てられます。このしくみは、関数の複数の結果を渡すためにしばしば利用されます。
関数の参照パラメータを定義するには、先頭に文字「&」を付けます。
システム例外の注意:
次の例はエラーとなります。
エラーの例:
fn test1 &p3 = return &p3.x p=[1,2,3] r=test1 p *r
結果: アクセス違反です。
コール スタックから渡されたローカルへの参照を戻すことはエラーになりますが、これを効率的に検出することは非常に困難です。システム例外を引き起こすことがあるので、ローカル変数への not to pass back &refs
ように注意してください。
例
function foo x y &z = ( -- ... z = x * y -- ... return true ) -- test function z = 12 foo 5 6 &z
3 つのパラメータ x、y、z を取る関数を宣言します。パラメータ リストの
&z
は、z パラメータの参照渡しが行われることを示します。この関数を呼び出す場合、新しい「&」参照演算子を使用して z パラメータの参照値を指定します。local var1, var2 ... var1 = foo 2 3 &var2
上記の例では、引数 2、3 および
&var2
を使って foo 関数を呼び出しています。&var2
は、var ローカル変数への参照です。関数の呼び出し時に、本体の z パラメータは、呼び出し側のvar2
ローカルへの参照になります。z = x * y
また foo 本体において、x * y が呼び出し側の
var2
ローカルに割り当てられます。下記を実行すると、var1 = foo 2 3 &var2
var1
にはtrue
が含まれ、var2
にはx * y
または6
が含まれます。
参照パラメータは任意の数を使用できます。また、必要に応じてキーワード パラメータとして使用することも可能です。
fn foo x y &z: = ...
次のようにして呼び出します。
var1 = foo 2 3 z:&var2
参照の引き渡しに使用される「&
」参照演算子は、MAXScript の任意の <accessor>
構文に適用できます。これら 2 つのオペレータは次のとおりです。
variables (locals, globals, rollout locals, plug-in locals, etc.)
property access
array index
parameter (of a scripted plug-in)
例
p = [1, 2, 3] foo 2 3 &p.x
これにより、上記のポイントの x 座標が参照で渡されます。呼び出し後に p の値は次のようになります。
[6, 2, 3]
例
a = #(1, 2, 3, 4, 5) foo 2 3 &a[3]
これにより、配列の 3 番目の要素が参照で渡されます。呼び出し後に a の値は #(1, 2, 6, 4, 5) になります。
この機能は、BY-REF インタフェース メソッド パラメータおよびその結果をサポートするために、MAXScript の関数公開インタフェースで使用されます。公開されたインタフェースで、by-ref (またはタイプ コード suffix _BR)を使って定義されたすべてのパラメータは、参照値「&」を必要とします。