2009-08-26 15 views
1

Ist es möglich, in ActionScript 3 einen Parameter an eine Methode ByRef (oder out usw.) zu übergeben?Übergabe von Variablen ByRef in Actionscript 3

Ich habe einige globale Variablen im oberen Bereich meiner Klasse und meine Methode wird diese Variable auffüllen, wenn es == null ist.

Ich übergebe die Variable, die ausgefüllt werden muss, aber bis jetzt haben meine Bemühungen eine lokal gefüllte Variable zurückgegeben, die die globale Gültigkeitsbereich-Version davon immer noch null lässt.

Die Variable, die an meine Methode übergeben wird, variiert, so dass ich sie in meiner Methode nicht fest codieren kann und sie einfach festlegen kann.

Antwort

4

Actionscript 3 Pässe params durch Verweis standardmäßig wie Java - mit Ausnahme von primitiven Typen. Aber was Sie versuchen, es tun zu lassen, ist nicht als Referenz zu verstehen. Der übergebene Parameter ist eine Referenz auf ein Objekt (in dem Fall, wenn es kein primitiver Typ ist), den Sie innerhalb der Funktion ändern können.

Aber, um Ihre Frage zu beantworten. Hier ist eine Lösung:

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

, die Sie mögen können:

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

AS3 hat keinen Bezug durch Verweis (es ist vergleichbar mit Java in dieser Hinsicht, in dem es Verweise nach Wert übergibt).

Etwas Ähnliches kann simuliert werden, wenn Sie den Client-Code steuern, indem das Objekt in einem anderen Objekt Einwickeln:

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

Verwenden Objekte.

zB:

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

In Actionscript 3.0 werden alle Argumente als Referenz übergeben, da alle Werte als Objekte gespeichert werden. Objekte, die zu den primitiven Datentypen gehören, einschließlich Boolean, Number, int, uint und String, verfügen jedoch über spezielle Operatoren, die sie so verhalten, als ob sie nach Wert übergeben würden. http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f56.html

In Java werden Argumente nach Wert übergeben. http://javadude.com/articles/passbyvalue.htm

+0

Alte Antwort. Aber falsch. Werte werden nicht als Objekte gespeichert und als Referenzen übergeben. Sie können ein 'global.uint'-Objekt konstruieren, aber es wird nicht das 'uint'-Primitiv sein. – Hydro

+0

Ein Objekt ist ein primitiver Typ, aber es wird wie ein Zeiger gespeichert. – Hydro