Question

Is it possible to pass a parameter to a method ByRef (or out etc) in ActionScript 3?

I have some globally scoped variables at the top of my class and my method will populate that variable if it's == null.

I'm passing in the variable which needs to be populated but so far my efforts have returned a locally populated variable leaving the globally scoped version of it still null.

The variable being passed to my method varies so I can't hardcode it in my method and simply set it.

Was it helpful?

Solution

ActionScript 3 passes params by reference by default, like Java - except for primitive types. But what you are trying to have it do isn't passing by reference. The parameter passed in is a reference to an object(in the case when it's not a primitive type), which you may well modify inside of the function.

But, to answer your question. Here is a solution:

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

Which you can use like:

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

OTHER TIPS

AS3 does not have pass by reference (it is similar to Java in this regard, in that it passes references by value).

Something similar can be simulated if you control the client code by wrapping the object in another object:

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

Use objects.

eg:

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

In ActionScript 3.0, all arguments are passed by reference, because all values are stored as objects. However, objects that belong to the primitive data types, which includes Boolean, Number, int, uint, and String, have special operators that make them behave as if they were passed by value. http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f56.html

In Java arguments are passed by value. http://javadude.com/articles/passbyvalue.htm

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top