Можете ли вы иметь аргументы «ByRef» в функциях AS3?

Любая идея, каквернуть несколько переменных из функции в ActionScript 3?

Что-нибудь вроде VB.NET, где вы можете иметьпеременная входного аргумента модифицированный (аргументы ByRef)?

Sub do (ByRef inout As Integer)
 inout *= 5;
End Sub

Dim num As Integer = 10
Debug.WriteLine (num)        '10
do (num)
Debug.WriteLine (num)        '50

Что-нибудьПомимо возвращаяассоциативный массив?

return {a:"string 1", b:"string 2"}

Ответы на вопрос(6)

Решение Вопроса

кроме [u] целых. Обобщая все, что наследуетObject будет передана функции по ссылке.

Это, как говорится, единственный способ, которым я верю, что вы можете сделать это, это использовать класс контейнера, какArray илиString («5» и сделать преобразование + математика).

В ActionScript 3.0 все аргументы передаются по ссылке, поскольку все значения хранятся в виде объектов. Однако объекты, принадлежащие к примитивным типам данных, включая Boolean, Number, int, uint и String, имеют специальные операторы, которые заставляют их вести себя так, как если бы они были переданы по значению.

Что привело меня к поискуканонический источник.

 Robinicks09 дек. 2008 г., 17:35
Спасибо! Отличный ответ - искал эту информацию годами.
 bzlm26 янв. 2009 г., 22:26
А как насчет вопроса «Есть идеи, как вернуть несколько переменных из функции в ActionScript 3»?

если вы понимаете программирование на C, вы будете знакомы с концепцией указателей.

Думайте, что указатель указывает на что-то в памяти, а все имена переменных "bob from (bob = new person ();)" по сути являются указателями, с которыми вы работаете.

Теперь, когда вы объявляете функцию, так как все они по значению

function Test(a:Object, b:Object):void {
   a = b;
}

Вы можете думать, что и «a», и «b» являются новыми указателями, поэтому только в функции «Test» существуют и «a», и «b», которые указывают на что-то в памяти.

Итак, давайте использовать его

var s1:Sprite = null;
var s2:Sprite = new Sprite;
Test(s1,s2);

Таким образом, указатели s1 и s2 ВСЕГДА будут указывать на «null» и «новый Sprite в памяти» соответственно, если они не изменяются как s1 и s2 в пределах их «Scope» <- Пожалуйста, убедитесь, что вы понимаете переменную область видимости, прежде чем даже пытаться заняться этот.

А внутри функции у нас теперь есть два новых указателя «a», указывающих на «null» и «b», указывающих на «тот же спрайт в памяти, что и s2». Так как объекты и массивы по сути являются коллекциями указателей, и только две новые указатели были созданы функцией для использования «a» и «b» любых свойств / переменных переменных «указатели на данные в памяти» из «a» или «b» все равно будет точно таким же, как и для "s1" и "s2", и будут точно такими же указателями.

Таким образом, внутри функции, когда для «a» установлено значение «b», на самом деле все, что происходит, это то, что указатель «a» теперь указывает на то же, что и «b». Но «s1» и «s2» по-прежнему указывают на то, на что они указывали раньше.

!!!! Если бы это было по ссылке, вы не могли бы думать о «a» и «b» как о новых указателях, они фактически были бы самими «s1» и «s2», за исключением того, что вы записали их как «a» и «b» ,

документов Flash:

function passByRef(objParam:Object):void 
{ 
    objParam.x++; 
    objParam.y++; 
    trace(objParam.x, objParam.y); 
} 
var objVar:Object = {x:10, y:15}; 
trace(objVar.x, objVar.y); // 10 15 
passByRef(objVar); // 11 16 
trace(objVar.x, objVar.y); // 11 16

Точка Бытие:Вы не можете изменить то, на что указывает ссылка, но вы можете изменить данные, на которые указывает ссылка, при условии, что эта ссылка является объектом / массивом.

Похоже, чтоСтроки, целые, единицы, логические значения передаются по значению. Я попробовал этот маленький фрагмент во Flash, и результаты были отрицательными:

function func(a:String){
    a="newVal";
}

var b:String = "old";

trace(b)    //  old
func(b);
trace(b)    //  old

Итак ... String тоже находится в черном списке? Булево тоже? Я имею в видукакой верный способ сказать какие типы передаются по ссылке?

 Triynko13 дек. 2013 г., 00:39
Чтобы было ясно, тип объекта не имеет значения, потому что этот раздел относится к соглашению о вызовах. «ByRef (ключевое слово Visual Basic): указывает, что аргумент передается таким образом, что вызываемая процедура может изменить значение переменной, лежащей в основе аргумента в вызывающем коде». AS3 не поддерживает это; он всегда передает аргументы "ByVal". Присвоение нового объекта параметру в функции не приведет к тому, что переменная, переданная параметру этой функции, будет указывать на новый объект. Сам объект обычно может быть изменен, но переданная переменная не может быть изменена внутри функции.
 Katax Emperore02 нояб. 2012 г., 04:31
Это тоже моя проблема. Я хочу отправить фактическую переменную (b в этом примере) в мою функцию и получить ее изменение по функции.stackoverflow.com/questions/13188723/...

чению !!! тот факт, что вы можете изменить свойство внутри переданного объекта, не означает, что вы можете изменить сам объект. попробуйте следующий код

function Test(a:Object, b:Object):void {
   a = b;
}

function Test2():void {
   var s1:Sprite = null;
   var s2:Sprite = new Sprite;

   Test(s1,s2);
   Trace(s1);
   Trace(s2);
}

и вот результат трассировки:

null
[object Sprite]
 Robinicks30 мар. 2009 г., 21:29
Ложь. Массивы и объекты передаются по ссылке. Изучите свои основы.
 Juan Pablo Califano09 июн. 2009 г., 03:29
+1 Ты в принципе прав. Ключ в том, что ссылки передаются по значению, как показывает ваш пример. Документы утверждают, что объекты передаются по ссылке, я думаю, чтобы избежать дальнейшей путаницы; но это простое объяснение в конечном итоге приводит к обратным последствиям; большинство программистов AS, которых я знаю, похоже, повторяют эту песню и поэтому не смогут понять, что происходит в вашем примере - многие люди ошибаются в Java и .NET; В большинстве случаев, однако, это не большая проблема.

Ваш ответ на вопрос