2009-08-26 8 views
1

ActionScript 3のメソッドByRef(またはoutなど)にパラメータを渡すことはできますか?変数を渡すActionscript 3のByRefを使用する

私は、クラスのトップにいくつかのグローバルスコープ変数を持っています。メソッドは、その変数がnullの場合、その変数に値を設定します。

私は移入する必要のある変数を渡していますが、これまでのところ、グローバルにスコープされたバージョンを残してローカルに移入された変数が返されています。

私のメソッドに渡される変数が変わるので、私のメソッドでハードコードできず、単純に設定することはできません。

答えて

4

ActionScript 3のパスparamsはを参照して、デフォルトでは、Javaのように:あなたは別のオブジェクト内でオブジェクトをラップすることにより、クライアントコードをコントロールしている場合と同様の

何かをシミュレートすることができます。しかし、あなたがしようとしていることは、参照渡しではありません。渡されたパラメータは、オブジェクトの参照です(プリミティブ型でない場合)。これは、関数内でよく変更される可能性があります。

しかし、あなたの質問に答えてください。

populateIfNull('name', 'Bob') 
populateIfNull('age', 20) 
1

AS3は参照渡しがありません(この点に関してJavaと同様ですが、値渡しで参照を渡します)。プリミティブ型以外 -

var myObj = null; 
myFun({ a: myObj }); 
function (param) { 
    if (param.a == null) { 
    param.a = "Hello"; 
    } 
} 
1

使用オブジェクト:あなたは次のように使用することができます

function populateIfNull(variableName, value){ 
    this[variableName] = this[variableName] || value 
} 

:ここでのソリューションです。

例:すべての値がオブジェクトとして格納されているため

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]); 
0

は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

+0

古い回答です。しかし、間違っている。値はオブジェクトとして格納されず、参照として渡されます。 'global.uint'オブジェクトを構築することもできますが、' uint'プリミティブではありません。 – Hydro

+0

オブジェクトはプリミティブ型ですが、ポインタのように格納されています。 – Hydro

関連する問題