参照パラメータの引き渡し
MAXScript は参照パラメータの引き渡しをサポートしています。これにより、参照を呼び出し元のコンテキスト内の変数、プロパティ、または配列要素に、関数のパラメータとして渡すことができます。また、呼び出される関数のパラメータに対する割り当ては、すべて呼び出し元の変数、プロパティ、または配列要素に直接割り当てられます。このしくみは、関数の複数の結果を渡すためにしばしば利用されます。
関数の参照パラメータを定義するには、先頭に文字「&」を付けます。
システム例外の注意:
次の例はエラーとなります。
エラーの例:
|
fn test1 &p3 = return &p3.x
p=[1,2,3]
r=test1 p
*r
|
結果: アクセス違反です。
コール スタックから渡されたローカルへの参照を戻すことはエラーになりますが、これを効率的に検出することは非常に困難です。システム例外を引き起こすことがあるので、ローカル変数への &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 は、var2 ローカル変数への参照です。関数の呼び出し時に、本体の z パラメータは、呼び出し側の var2 ローカルへの参照になります。
|
|
また foo 本体において、x * y が呼び出し側の var2 ローカルに割り当てられます。下記を実行すると、
|
|
var1 には true が格納され、 var2 には x * y または 6 が格納されます。
|
参照パラメータは任意の数を使用できます。また、必要に応じてキーワード パラメータとして使用することも可能です。
参照の引き渡しに使用される「 & 」参照演算子は、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 の値は次のようになります。
|
|
例
|
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)を使って定義されたすべてのパラメータは、参照値「&」を必要とします。