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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.06.2014, 13:50
inozemcev вне форума Посмотреть профиль Отправить личное сообщение для inozemcev Найти все сообщения от inozemcev
  № 1  
Ответить с цитированием
inozemcev
[+ 1.0 08.10.14]
 
Аватар для inozemcev

блогер
Регистрация: Mar 2010
Адрес: x = stage.stageWidth/2 y= stage.stageHeight/2
Сообщений: 293
Записей в блоге: 2
По умолчанию Магия Enumiration (перечисления)

собственно, есть такой код

Код AS3:
package
{
	/**
	 * Пример реализации паттерна TypeSave Enumeration на языке ActionScript 3.
	 *
	 * @author  Aleh Krutsikau
	 * @version 0.1
	 */
	public class Season
	{
		// Ссылка на единственный экземпляр класса.
		public static const WINTER : Season = new Season("winter");
		public static const SPRING : Season = new Season("spring");
		public static const SUMMER : Season = new Season("summer");
		public static const AUTUMN : Season = new Season("autumn");
 
		private static var _enumCreated:Boolean = false;
		// magic happens here, the static code block
		{
			_enumCreated = true;
		}
 
		private var _seasonName : String;
 
		/**
		 * Конструктор.
		 */
		public function Season(seasonName : String)
		{
			if (_enumCreated)
				throw new Error("The enum is already created.");
			_seasonName = seasonName;
		}
 
		public function get seasonName() : String {
			return _seasonName;
		}
	}
}
не могу понять как работает магия. А именно в каком случае работает код спрятанный в фигурных скобках в теле класса
Код AS3:
public class Season
{
{
_enumCreated = true;
}
}

Старый 09.06.2014, 14:24
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 2  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Можно убрать фигурные скобки. Исполнение кода происходит последовательно "сверху вниз".
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

Регистрация: Feb 2012
Сообщений: 1,540
Этот код выполнится перед первым вызовом метода класса, в том числе и конструктора.

Старый 09.06.2014, 21:26
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 4  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
"сверху вниз", но после инициализации всех статических свойств, видимо, это и подразумевается под магией
Код AS3:
package
{
 
	public class Season
	{
		_enumCreated = (trace("assign (true)") == null);// выполнится самым поледним
 
		private static var _enumCreated:Boolean =  (trace("init (false)") != null);
 
		public static const WINTER : Season = new Season("winter");
		public static const SPRING : Season = new Season("spring");
		public static const SUMMER : Season = new Season("summer");
		public static const AUTUMN : Season = new Season("autumn");
 
		private var _seasonName : String;
 
 
		public function Season(seasonName : String)
		{
			if (_enumCreated)
				throw new Error("The enum is already created.");
			_seasonName = seasonName;
			trace( seasonName + " created");
		}
 
		public function get seasonName() : String {
			return _seasonName;
		}
	}
}


Последний раз редактировалось silin; 09.06.2014 в 22:39.
Старый 10.06.2014, 10:31
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 5  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Причем, забавно. Чтобы инициализировать статику и исполнить код в теле класса достаточно упомянуть этот класс, можно даже где-нибудь на уровне пакета или класса.

Код AS3:
package {
    Season;
}
Код AS3:
package {
    class SecondSeason {
        Season;
    }
}
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 10.06.2014, 11:29
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 6  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Это в Air SDK, если мне не изменяет память.
А во flex SDK при создании первого экземпляра или при первом вызове статического метода.
Из-за этой особенности при переезде с компилятора на компилятор поломал голову.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.

Старый 11.06.2014, 10:47
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 7  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Ага, проверил. Во Flex можно воспользоваться конструкцией кастинга или конвертации.
Class(Season) или Season as Class. Либо в общем случае Object(Season) или Season as Object.

Код AS3:
package {
    Class(Season);
}
Код AS3:
package {
    class SecondSeason {
        Season as Class;
    }
}
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

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

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


 


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


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