ActionScript 3 でメソッド ByRef (または out など) にパラメータを渡すことは可能ですか?
クラスの先頭にグローバル スコープの変数がいくつかあり、== null の場合、メソッドはその変数を設定します。
入力する必要がある変数を渡していますが、これまでのところ、ローカルに入力された変数が返され、グローバルにスコープされたバージョンはまだnullのままです。
メソッドに渡される変数はさまざまであるため、メソッドにハードコードして単純に設定することはできません。
ActionScript 3 でメソッド ByRef (または out など) にパラメータを渡すことは可能ですか?
クラスの先頭にグローバル スコープの変数がいくつかあり、== null の場合、メソッドはその変数を設定します。
入力する必要がある変数を渡していますが、これまでのところ、ローカルに入力された変数が返され、グローバルにスコープされたバージョンはまだnullのままです。
メソッドに渡される変数はさまざまであるため、メソッドにハードコードして単純に設定することはできません。
ActionScript 3 は、Java のようにデフォルトで参照によってパラメーターを渡します - プリミティブ型を除きます。しかし、あなたがやろうとしていることは、参照渡しではありません。渡されたパラメーターはオブジェクトへの参照です (プリミティブ型ではない場合)。これは関数内で変更することができます。
しかし、あなたの質問に答えるために。ここに解決策があります:
function populateIfNull(variableName, value){
this[variableName] = this[variableName] || value
}
次のように使用できます。
populateIfNull('name', 'Bob')
populateIfNull('age', 20)
オブジェクトを使用します。
例えば:
var myObj : Object = new Object();
var myArr : Array;
myObj.arr = myArr;
function populateViaRef(obj : Object) : void {
obj.arr = new Array();
for(var i : Number = 0; i < 10; i++)
obj.arr[i] = i;
}
populateViaRef(myObj);
for(var i : Number = 0; i < 10; i++)
trace(myObj.arr[i]);
ActionScript 3.0 では、すべての値がオブジェクトとして格納されるため、すべての引数が参照によって渡されます。ただし、Boolean、Number、int、uint、および String を含むプリミティブ データ型に属するオブジェクトには、値で渡されたかのように動作させる特別な演算子があります。 http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f56.html
Java では、引数は値で渡されます。 http://javadude.com/articles/passbyvalue.htm
AS3 には参照渡しがありません (この点では、参照を値渡しするという点で Java に似ています)。
オブジェクトを別のオブジェクトでラップしてクライアント コードを制御すると、同様のことがシミュレートできます。
var myObj = null;
myFun({ a: myObj });
function (param) {
if (param.a == null) {
param.a = "Hello";
}
}