Передача в переменную ByRef в Actionscript 3 - PullRequest
1 голос
/ 26 августа 2009

Можно ли передать параметр в метод ByRef (или из него и т. Д.) В ActionScript 3?

У меня есть некоторые глобальные переменные в верхней части моего класса, и мой метод заполнит эту переменную, если она == null.

Я передаю переменную, которую нужно заполнить, но до сих пор мои усилия вернули локально заполненную переменную, оставив глобально ограниченную версию этой переменной по-прежнему нулевой.

Переменная, передаваемая в мой метод, варьируется, поэтому я не могу жестко закодировать ее в своем методе и просто установить ее.

Ответы [ 4 ]

4 голосов
/ 26 августа 2009

ActionScript 3 по умолчанию передает параметры по ссылке, как Java, за исключением примитивных типов. Но то, что вы пытаетесь сделать, не передается по ссылке. Передаваемый параметр является ссылкой на объект (в случае, если это не примитивный тип), который вы вполне можете изменить внутри функции.

Но, чтобы ответить на ваш вопрос. Вот решение:

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

Который вы можете использовать как:

populateIfNull('name', 'Bob')
populateIfNull('age', 20)
1 голос
/ 30 апреля 2013

В ActionScript 3.0 все аргументы передаются по ссылке, поскольку все значения хранятся в виде объектов. Однако объекты, принадлежащие к примитивным типам данных, включая логические, Number, int, uint и String, имеют специальные операторы, которые заставляют их вести себя так, как если бы они были переданы по значению. http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f56.html

В Java аргументы передаются по значению. http://javadude.com/articles/passbyvalue.htm

1 голос
/ 20 августа 2010

Используйте объекты.

например:

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]);
1 голос
/ 26 августа 2009

AS3 не имеет передачи по ссылке (в этом отношении он аналогичен Java, так как передает ссылки по значению).

Нечто подобное можно смоделировать, если вы управляете клиентским кодом, помещая объект в другой объект:

var myObj = null;
myFun({ a: myObj });
function (param) {
  if (param.a == null) {
    param.a = "Hello";
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...