![]() |
Константная переменная изменяется при работе приложения
Не пойму логику поведения программы.
Код AS3:
Код:
Output: ,1,1,2,1 / ,1,1,2,1Собственно вопрос: почему, в данном случае, константная переменная изменилась? И изменяется синхронно с обычным массивом (left_to_add в данном случае) UPD: Приравнивание через For прокатило, но все равно не понятно почему происходит явление описанное выше. |
значит ты его после присваивания меняешь
да и вообще ничего не мешает напрямую менять элементы массива, объвленного как private static const left_to_addDefault:Array = ["", 4, 3, 2, 1]; сылку просто на другой массив в статическое поле left_to_addDefault НЕ засунешь |
ну обычная переменная(left_to_add) конечно меняется с течением времени, а константа создана чтобы вернуть массив в дефолт.
Тк, насколько я знаю, константа она и на то константа, чтобы с течением времени не изменяться. Т.е. присвоил один раз при объявлении и намертво. Разве не так?) |
как-бы обращение к массиву и к любому объекту идет по ссылке, т.е. array1 = array2 не копирует массив а просто записывает в array1 ссылку на array2,
т.е. в константу просто нельзя записать другую ссылку, а менять ее объект ничего не запрещает. Для копирования массива можно использовать concat: Код AS3:
(но это естественно не касается элементов, входящих в массив - они не копируются, копируются только ссылки :) ) |
Цитата:
при этом, она, так сказать, начинает себя вести как переменная ЗЫ. не помню где прочитал, поправьте если не прав |
вы передали вашей left_to_add ссылку на массив, соответственно вы меняете массив, заданный в вашей константе
чтобы избежать таких штук наверняка, попробуйте Код AS3:
TanaTix, константа, как ссылочный объект ссылку свою не меняет..мы не можем прописать константе ссылку на другой объект, но сам обхект по ссылке мы вполне себе можем курочить как хотим Добавлено через 7 минут и вообще заголовок топика порадовал: "константная переменная" ) |
cleptoman, в моем понимании константа... Собственно название говорит само за себя - она не должна (и, пожалуй, не должна уметь) менять свое значение.
А вот такое понятие как "ссылочный объект" заинтересовало. Можно поподробней? |
константа свое значение и не меняет.
есть простые типы данных и есть ссылочные простые Number,String etc ссылочные - Object,Array константа хранит и не меняет свое значение Код AS3:
Код AS3:
однако на ряду с этим мы можем курочть объект, ссылку на который хранит наша константа Код AS3:
|
По аналогии с C++, константа в AS3 - это как константный указатель на объект, а не указатель на константный объект.
|
cleptoman, спасибо за разъяснение.
vinch, с С++ не знаком, но суть уже ясна. |
| Часовой пояс GMT +4, время: 05:54. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.