<?php include_once('header.html');?>
<div id="header"></div>
<?php include_once('footer.html');?>
Я Верю лучшему, которое можно сделать, передать контейнерный объект как аргумент функции и изменить значения некоторых свойств в том объекте:
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);
Я предполагаю, что альтернатива где-нибудь определила бы этот вид вещи...
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, и т.д.
Это придирается к мелочам, но int
, String
, Number
и другие переданы ссылкой, это просто, что они неизменны. Конечно, эффект совпадает с, если они были переданы значением.
Если ActionScript работает как JavaScript,
[a,b] = [b,a]
Это является раздражающим. Но если Вы используете различные идиомы, чем в, например, C#, можно получить результаты разумного качества. Если необходимо передать много параметров назад и вперед, передачи в объекте, заполненном необходимыми данными, и изменить параметры объекта, когда Вы возвращаетесь. Класс объекта для просто этого вида вещи.
Если просто необходимо возвратить набор данных, возвратите Объект. Это больше в соответствии со стилем ECMAScript, чем pass-ref семантика.
Вы могли также использовать обертку вместо интервала:
public class Integer
{
public var value:int;
public function Integer(value:int)
{
this.value = value;
}
}
, Конечно, это было бы более полезно, если Вы могли бы использовать перегрузку оператора...
Назначение деструктуризации (например, [a, b] = [b, a]) не определено в спецификации ECMA-262 3 и не реализовано в JavaScript 1.5, который является версией, эквивалентной реализации JScript в IE. . Я видел этот синтаксис в предварительном просмотре спецификаций AS4 и считаю, что он является частью JavaScript 1.7.
Достаточно взглянуть на код Java. С самого начала в Java существует соглашение, согласно которому ссылочные типы передаются по ссылке, а примитивные типы - по значению. Это очень хорошая модель во многих отношениях.
Но, говоря о свопинге, лучший и самый простой способ сделать своп в Java / AS3 - это использовать следующие три строки:
var temp:int = array[i]; array[j] = array[i]; array[i] = temp;
На самом деле нет никаких причин использовать функцию для простого обмена, когда вы можете сделать это быстрее всего с 3 строками.