Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.09.2012, 15:50
red_penguin вне форума Посмотреть профиль Отправить личное сообщение для red_penguin Найти все сообщения от red_penguin
  № 1  
Ответить с цитированием
red_penguin
 
Аватар для red_penguin

Регистрация: Jun 2011
Адрес: Пенза
Сообщений: 74
Записей в блоге: 1
По умолчанию Проблема с ссылками на объект.

Код AS3:
for (var i:int = 0; i < 10; i++)
{
	var view:MovieClip;
	if (i == 0) 
	{
		view = new MovieClip;
		view.x = 5;
		trace("YAP");
	}
	trace(view, view.x);
}
В консоль выводится:
Код:
YAP
[object MovieClip] 5
[object MovieClip] 5
[object MovieClip] 5
[object MovieClip] 5
[object MovieClip] 5
[object MovieClip] 5
[object MovieClip] 5
[object MovieClip] 5
[object MovieClip] 5
[object MovieClip] 5
Как можно увидеть по не хитрому коду и распечатке дела творятся странные)
Разве не должна команда trace при i не равном 0 выводить null?

Старый 20.09.2012, 15:52
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 2  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Нет. view-то так и ссылается на первый экземпляр (он же единственный).
__________________
тут я

Старый 20.09.2012, 15:58
red_penguin вне форума Посмотреть профиль Отправить личное сообщение для red_penguin Найти все сообщения от red_penguin
  № 3  
Ответить с цитированием
red_penguin
 
Аватар для red_penguin

Регистрация: Jun 2011
Адрес: Пенза
Сообщений: 74
Записей в блоге: 1
но я же каждую итерацию создаю новую переменную.
Разве не именно эту переменную печатает trace?
И разве она не пустая раз я её не инициализирую?

Старый 20.09.2012, 15:59
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 4  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Эта строчка, грубо говоря, игнорируется компилятором. Если поставить брейкпоинт на ней, то он даже не сработает.
__________________
тут я

Старый 20.09.2012, 16:00
red_penguin вне форума Посмотреть профиль Отправить личное сообщение для red_penguin Найти все сообщения от red_penguin
  № 5  
Ответить с цитированием
red_penguin
 
Аватар для red_penguin

Регистрация: Jun 2011
Адрес: Пенза
Сообщений: 74
Записей в блоге: 1
а не могли объяснить почему так?

Старый 20.09.2012, 16:02
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 6  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Все переменные, объявленные внутри циклов, всегда переносятся в байткоде (кажется там) в начало метода.
например отсюда
Код AS3:
for (var i:int = 0; i < 10; i++)
i тоже вынесется в начало метода при компиляции.

Я имею в виду объявление переменных, естественно.
__________________
тут я

Старый 20.09.2012, 16:04
red_penguin вне форума Посмотреть профиль Отправить личное сообщение для red_penguin Найти все сообщения от red_penguin
  № 7  
Ответить с цитированием
red_penguin
 
Аватар для red_penguin

Регистрация: Jun 2011
Адрес: Пенза
Сообщений: 74
Записей в блоге: 1
ах вот оно как...
Это многое объясняет)

А ведь такая работа кода - это ошибка компилятора выходит?

Старый 20.09.2012, 16:06
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 8  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Не ошибка, а особенность. К ней надо привыкнуть и учесть, что
Код AS3:
for (var i:uint = 0; i < 10; i++) {}
var i:uint = 10;
даст варнинг о дубликате объявления переменной

Добавлено через 1 минуту
То есть область видимости метода - это область видимости всего, что находится внутри метода (кроме переменных в анонимных функциях внутри этого метода).
__________________
тут я

Старый 20.09.2012, 16:09
red_penguin вне форума Посмотреть профиль Отправить личное сообщение для red_penguin Найти все сообщения от red_penguin
  № 9  
Ответить с цитированием
red_penguin
 
Аватар для red_penguin

Регистрация: Jun 2011
Адрес: Пенза
Сообщений: 74
Записей в блоге: 1
теперь все ясно. спасибо)
Я то думал что то что тело цикла - это как тело функции.

А про ваш случай думал, что конструкция var i:uint в описании цикла относиться как раз к телу)

Век живи, век учись)

Старый 20.09.2012, 16:10
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 10  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Тогда вот пример более ярко показывающий скоуп:
Код AS3:
for (var i:uint = 0; i < 10; i++) {
    var myVar:Object = {};
}
 
var myVar:Object = null; // варнинг
__________________
тут я

Создать новую тему Ответ Часовой пояс GMT +4, время: 16:50.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 16:50.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.