![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Feb 2010
Адрес: (15,78,45)
Сообщений: 19
|
Не могу понять, почему _arr2==null?
Объясните, пожалуйста. 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; } } Последний раз редактировалось lubko; 22.06.2012 в 14:27. |
|
|||||
|
У вас реализация синглтона неправильная.
Плюс к тому же непонятны операции между статическими и обычными переменными. Сделайте так, и увидите разницу:
__________________
adobe AS3 manual |
|
|||||
|
Регистрация: Feb 2010
Адрес: (15,78,45)
Сообщений: 19
|
если поставить брейкпоинт на строке
будет видно что статическая константа ARR1 уже проинициализирована, а ARR2 все еще равна null. поэтому в _arr2 попадает null. переменные _arr1 и _arr2 нужны были лишь чтобы показать это. |
|
|||||
|
Регистрация: Aug 2008
Адрес: Рязань
Сообщений: 723
|
а так?
__________________
low + |
|
|||||
|
Регистрация: Feb 2010
Адрес: (15,78,45)
Сообщений: 19
|
Цитата:
но кто-нибудь может ответить почему ARR2==null на указаной строчке |
|
|||||
|
Регистрация: Dec 2005
Адрес: вне пространствавремени
Сообщений: 27
|
Потому что весь код класса, включая и статические переменные выполняются/инициализируются во время первого использования класса, по порядку. А у вас первое использование класса происходит между ARR1 и ARR2(ARR1, конструктор, ARR2, getInstance), поэтому получается ARR1 уже проинициализиорован, а ARR2 ещё нет. Если вы каким-то образом создадите второй экземпляр "синглтона", то у него уже всё будет впорядке.
__________________
while(true){trace(Math.random());}; Последний раз редактировалось a_[w]; 22.06.2012 в 18:41. |
|
|||||
|
|
|
|||||
|
Регистрация: Feb 2010
Адрес: (15,78,45)
Сообщений: 19
|
Цитата:
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."); } } public class Singleton { public static const _instance = new Singleton(); public function Singleton() { if (_instance) throw new Error("Class is singleton."); } } не совсем понимаю что значит эта проверка if(Singleton). но это вроде другой вопрос. хотя тоже интересно Добавлено через 4 минуты Цитата:
спасибо |
|
|||||
|
блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
|
1.
Цитата:
2. На момент создания статичного поля "instance" Singleton`а не существует (хотя наверное не класса, а функции-конструктроа), судя по комментарию. А вот в конструкторе синглетона Boolean(Singleton) вернет true, потому, что он уже существует. Довольно неочевидное явление ![]()
__________________
hauts.ru |
![]() |
![]() |
Часовой пояс GMT +4, время: 11:38. |
|
|
« Предыдущая тема | Следующая тема » |
|
|