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

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

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

Регистрация: Feb 2010
Адрес: (15,78,45)
Сообщений: 19
По умолчанию Singleton, время инициализации статической константы

Не могу понять, почему _arr2==null?
Объясните, пожалуйста.

Код AS3:
var sg:Singleton = Singleton._instance;
trace(sg.arr1);
trace(sg.arr2);
Код AS3:
public class Singleton
{
	public static const ARR1:Array = [1, 2, 3];
	public static const _instance = new Singleton();
	public static const ARR2:Array = [3, 2, 1];
 
	private var _arr1:Array = ARR1;
	private var _arr2:Array = ARR2;
 
	public function Singleton()
	{
		if (_instance)
			throw new Error("Class is singleton.");
	}
 
	public function get arr1():Array { return _arr1; }		
	public function get arr2():Array { return _arr2; }
}
Код AS3:
1,2,3
null


Последний раз редактировалось lubko; 22.06.2012 в 14:27.
Старый 22.06.2012, 14:33
strangedk вне форума Посмотреть профиль Отправить личное сообщение для strangedk Найти все сообщения от strangedk
  № 2  
Ответить с цитированием
strangedk
 
Аватар для strangedk

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
У вас реализация синглтона неправильная.

Плюс к тому же непонятны операции между статическими и обычными переменными.

Сделайте так, и увидите разницу:

Код AS3:
trace(Singleton.ARR1); // 1,2,3
trace(Singleton.ARR2); // 3,2,1
__________________
adobe AS3 manual

Старый 22.06.2012, 16:46
lubko вне форума Посмотреть профиль Отправить личное сообщение для lubko Найти все сообщения от lubko
  № 3  
Ответить с цитированием
lubko

Регистрация: Feb 2010
Адрес: (15,78,45)
Сообщений: 19
если поставить брейкпоинт на строке
Код AS3:
private var _arr2:Array = ARR2;
будет видно что статическая константа ARR1 уже проинициализирована, а ARR2 все еще равна null.
поэтому в _arr2 попадает null.
переменные _arr1 и _arr2 нужны были лишь чтобы показать это.

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

Регистрация: Aug 2008
Адрес: Рязань
Сообщений: 723
а так?

Код AS3:
public static const ARR1:Array = [1, 2, 3];
public static const ARR2:Array = [3, 2, 1];
public static const _instance = new Singleton();
__________________
low +

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

Регистрация: Nov 2006
Адрес: СПб
Сообщений: 921
Отправить сообщение для FlashRus с помощью ICQ Отправить сообщение для FlashRus с помощью Skype™
http://ru.wikipedia.org/wiki/Одиночк...проектирования)

Старый 22.06.2012, 17:34
lubko вне форума Посмотреть профиль Отправить личное сообщение для lubko Найти все сообщения от lubko
  № 6  
Ответить с цитированием
lubko

Регистрация: Feb 2010
Адрес: (15,78,45)
Сообщений: 19
Цитата:
Сообщение от Jewelz Посмотреть сообщение
а так?

Код AS3:
public static const ARR1:Array = [1, 2, 3];
public static const ARR2:Array = [3, 2, 1];
public static const _instance = new Singleton();
так все ОК. в _arr2 попадет значение ARR2.

но кто-нибудь может ответить почему ARR2==null на указаной строчке
Код AS3:
public class Singleton
{
	public static const ARR1:Array = [1, 2, 3];
	public static const _instance = new Singleton();
	public static const ARR2:Array = [3, 2, 1];
 
	private var _arr1:Array = ARR1;
	private var _arr2:Array = ARR2;  //  breakpoint!!!!  здесь ARR2==0, a ARR1== [1, 2, 3]
 
}

Старый 22.06.2012, 17:41
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 7  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Вероятно потому, что инициализация приватных полей происходит во время создания класса, а на этот момент ARR2 не существует.
__________________
hauts.ru

Старый 22.06.2012, 17:42
lubko вне форума Посмотреть профиль Отправить личное сообщение для lubko Найти все сообщения от lubko
  № 8  
Ответить с цитированием
lubko

Регистрация: Feb 2010
Адрес: (15,78,45)
Сообщений: 19
Цитата:
Сообщение от FlashRus Посмотреть сообщение
вот код с вики:
Код AS3:
public class Singleton
{
         public static const instance:Singleton= new Singleton;
 
         public function Singleton()
         {
                 // Boolean(Singleton) is false when creating instance before static constructor executed.
                 if(Singleton) throw new Error("Class is singleton.");
          }
 
}
вот мой:
Код AS3:
public class Singleton
{
	public static const _instance = new Singleton();
 	public function Singleton()
	{
		if (_instance)
			throw new Error("Class is singleton.");
	}
}
вроде не сильно отличается, только я проверяю _instance.
не совсем понимаю что значит эта проверка if(Singleton).
но это вроде другой вопрос. хотя тоже интересно

Добавлено через 4 минуты
Цитата:
Сообщение от Hauts Посмотреть сообщение
Вероятно потому, что инициализация приватных полей происходит во время создания класса, а на этот момент ARR2 не существует.
похоже на правду. скажите где можно почитать про такие вещи подробней?
спасибо

Старый 22.06.2012, 17:51
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 9  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
1.
Цитата:
скажите где можно почитать про такие вещи подробней?
— на flasher.ru.
2.
Код AS3:
if(Singleton) throw new Error("Class is singleton.");
На момент создания статичного поля "instance" Singleton`а не существует (хотя наверное не класса, а функции-конструктроа), судя по комментарию. А вот в конструкторе синглетона Boolean(Singleton) вернет true, потому, что он уже существует. Довольно неочевидное явление
__________________
hauts.ru

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

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
lubko, Просто не делайте так, и не возникнет таких вопросов.
Зачем вам в одном классе статические переменные класса, поля объекта и геттеры?

Создайте один класс с данными, и напичкайте его статическими данными, и потом обращайтесь в синглтоне к нему. Зачем так всё путать.
__________________
adobe AS3 manual

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

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

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


 


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


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