Что самый чистый путь состоит в том, чтобы моделировать передачу ссылкой в Actionscript 3.0?

  <?php include_once('header.html');?>

    <div id="header"></div>

    <?php include_once('footer.html');?>
13
задан Matt W 8 September 2008 в 03:07
поделиться

8 ответов

Я Верю лучшему, которое можно сделать, передать контейнерный объект как аргумент функции и изменить значения некоторых свойств в том объекте:

function swapAB(aValuesContainer:Object):void
{
    if (!(aValuesContainer.hasOwnProperty("a") && aValuesContainer.hasOwnProperty("b")))
        throw new ArgumentError("aValuesContainer must have properties a and b");

    var tempValue:int = aValuesContainer["a"];
    aValuesContainer["a"] = aValuesContainer["b"];
    aValuesContainer["b"] = tempValue;
}
var ints:Object = {a:13, b:25};
swapAB(ints);
7
ответ дан 1 December 2019 в 23:16
поделиться

Я предполагаю, что альтернатива где-нибудь определила бы этот вид вещи...

public class Reference {
    public var value:*;
}

Тогда функции использования, которые берут некоторое количество Ссылочных аргументов для действия как "указатели", если Вы действительно просто ищете параметры и или инициализируете их на пути в или не и Ваша подкачка, стали бы:

function swap(Reference a, Reference b) {
    var tmp:* = a.value;
    a.value = b.value;
    b.value = tmp;
}

И Вы могли всегда сходить с ума и определять определенный IntReference, StringReference, и т.д.

4
ответ дан 1 December 2019 в 23:16
поделиться

Это придирается к мелочам, но int, String, Number и другие переданы ссылкой, это просто, что они неизменны. Конечно, эффект совпадает с, если они были переданы значением.

4
ответ дан 1 December 2019 в 23:16
поделиться

Если ActionScript работает как JavaScript,

[a,b] = [b,a]
-2
ответ дан 1 December 2019 в 23:16
поделиться

Это является раздражающим. Но если Вы используете различные идиомы, чем в, например, C#, можно получить результаты разумного качества. Если необходимо передать много параметров назад и вперед, передачи в объекте, заполненном необходимыми данными, и изменить параметры объекта, когда Вы возвращаетесь. Класс объекта для просто этого вида вещи.

Если просто необходимо возвратить набор данных, возвратите Объект. Это больше в соответствии со стилем ECMAScript, чем pass-ref семантика.

1
ответ дан 1 December 2019 в 23:16
поделиться

Вы могли также использовать обертку вместо интервала:

public class Integer
{
    public var value:int;

    public function Integer(value:int)
    {
        this.value = value;
    }
}

, Конечно, это было бы более полезно, если Вы могли бы использовать перегрузку оператора...

3
ответ дан 1 December 2019 в 23:16
поделиться

Назначение деструктуризации (например, [a, b] = [b, a]) не определено в спецификации ECMA-262 3 и не реализовано в JavaScript 1.5, который является версией, эквивалентной реализации JScript в IE. . Я видел этот синтаксис в предварительном просмотре спецификаций AS4 и считаю, что он является частью JavaScript 1.7.

0
ответ дан 1 December 2019 в 23:16
поделиться

Достаточно взглянуть на код Java. С самого начала в Java существует соглашение, согласно которому ссылочные типы передаются по ссылке, а примитивные типы - по значению. Это очень хорошая модель во многих отношениях.

Но, говоря о свопинге, лучший и самый простой способ сделать своп в Java / AS3 - это использовать следующие три строки:

var temp:int = array[i];
array[j] = array[i];
array[i] = temp;

На самом деле нет никаких причин использовать функцию для простого обмена, когда вы можете сделать это быстрее всего с 3 строками.

2
ответ дан 1 December 2019 в 23:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: