Каскадные массивы его изменили на вторичный временный массив в as3 - PullRequest
0 голосов
/ 19 июля 2011

Я столкнулся с уникальной (для меня) и довольно загадочной ситуацией.

У меня есть массив из трех значений.

фокусное [х, у, г]

эти значения изменяются в зависимости от ввода пользователя.

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

Упрощенная псевдо-версия моего кода:

var temp:Array = focal; //I have even changed this to a const at times but to no avail

//changes to array are made like thus:
focal[1]++;
focal[0]--;

if(valid){
doStuff();
} else {
focal = temp;
}

Однако, когда очаг [1] ++; фокусное [0] -; т. д., т. д., код имеет место. Это также изменило временный массив.

и, поскольку он меняет мой темп, он никогда не возвращает мне исходный код к его предыдущей природе.

Я никогда не видел такого поведения, и оно меня как бы сбивает с толку. Предложения?

Ответы [ 2 ]

3 голосов
/ 19 июля 2011

когда вы делаете так:

var temp:Array = focal; // Both array variables refer to the same array.

Если вы хотите создать резервный или временный массив, вам нужно скопировать все компоненты из одного в другой:

var baseArray : Array = [0, 0, 0];
var tempArray : Array = baseArray.slice();

baseArray[0]++;
baseArray[1] += 2;
baseArray[2] += 3;

trace ( baseArray ); // output: 1,2,3
trace ( tempArray ); // output: 0,0,0
0 голосов
/ 19 июля 2011

Я добавляю метод глубокого копирования в (очень хороший) пост Евгения:

import flash.utils.ByteArray; 

function clone(source:Object):* 
{ 
    var myBA:ByteArray = new ByteArray(); 
    myBA.writeObject(source); 
    myBA.position = 0; 
    return(myBA.readObject()); 
}

Дополнительная информация здесь: http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7ee7.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...