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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.06.2011, 16:51
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 11  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Я бы предложил такое:
Код AS3:
private var assetClassInfo:Object = {"var1":Sprite, "var2":Shape};
private var var1:Sprite;
private var var2:Shape;//да, дублирование, гадость, но жить можно
private function checkObj(...objs):void
{
	for each(var s:String in objs)
	{
		if(!this[s]) this[s] = new assetClassInfo[s];
	}
}
//использование
public function functionWithVar2(whatever:Whatever):WhateverElse
{
	checkObj("var2");
//var2 определена
}
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 25.06.2011, 17:08
Zolza вне форума Посмотреть профиль Отправить личное сообщение для Zolza Найти все сообщения от Zolza
  № 12  
Ответить с цитированием
Zolza

Регистрация: Jun 2011
Сообщений: 31
Цитата:
У вас код
Код AS3:
if(!var2) = new var2Class();
компилируется?
Это опечатка в посте, будем считать ее в данном контексте псевдо-кодом
Цитата:
То есть objs[i] у вас, скорее всего, null (раз вы работаете с объектами). Потом вы передаете этот null в getQualifiedClassName. И что же вы хотите получить? Тем более вы не сможете инициализировать поле класса, так как не передаете в метод ссылку на него (а передаете вы null). Так что ваш подход реализовать невозможно таким способом.
Да, здесь я ошибся.
Цитата:
Zolza, может я опять что-то не совсем так понял, но для таких целей в АС3 есть звездочка * (wildcard).
т.е., создаем переменную без типа:
Про звездочку в курсе, это не мой случай. Нужно было получить инфу о типе, и на основе этого создать объект. Но инфу о типе из объекта null получить не удалось. Просто только сейчас пришло понимание того, что во время выполнения флэшке плевать, как я назвал переменную и какой тип данных она может иметь.
Цитата:
если классы ваши собственные а не нативные, то можете переопределить метод toString() и выводить то что вам угодно.. так же есть оператор проверки типа "is" (myValue is Sprite)
В случае с is или as нужно было бы делать свитчер, тут опять не мой случай. А вот с переопределением toString() идея интересная, возьму на заметку.
Цитата:
Вообще, думаю, что подход неверен.
Почитайте про пул объектов.
Как раз то, что вам нужно.
Беглый просмотр по пулу подтвердил, что это как раз то самое. Если у вас есть какие-нибудь интересные(спрятанные в закромах гугла и известные только избранным) ссылки на данную тему, поделитесь.
Цитата:
Я бы предложил такое
Я так понимаю это что-то вроде ассоциативного массива "имя переменной - тип этой переменной"?


Последний раз редактировалось Zolza; 25.06.2011 в 17:15.
Старый 25.06.2011, 18:07
semenyakinVS вне форума Посмотреть профиль Отправить личное сообщение для semenyakinVS Найти все сообщения от semenyakinVS
  № 13  
Ответить с цитированием
semenyakinVS

Регистрация: Mar 2010
Сообщений: 137
Может, поможет вот это обсуждение:

Проблема с typeOf()

Старый 25.06.2011, 22:01
S-ed вне форума Посмотреть профиль Отправить личное сообщение для S-ed Найти все сообщения от S-ed
  № 14  
Ответить с цитированием
S-ed
 
Аватар для S-ed

Регистрация: Jul 2001
Адрес: SPb.RU
Сообщений: 148
Отправить сообщение для S-ed с помощью ICQ
Nooob
Null тк преобразование неудачное. Нельзя экземпляр класса в строку преобразовывать. Для этого есть toString().

Zolza
typeOf - как уже сказали - оператор, он различает всего 12 типов данных.

Вы тут обсуждает как "правильно" писать быдлокод?
Пытаетесь переложить функцию определения типа данных на компилятор?
Почему бы не ввести новый тип данных, вроде псевдо булевских переменных, или что-то из "стохастического программирования"?
Не хотел бы я разбираться в Вашем коде.

Пока не отработал конструктор - нет никакого класса.
В коде, опледеление типа нужно только для того чтоб компилятор работал как надо, чтоб не тратить часы на RTE.

Не нравятся типизированные переменные, пользуйтесь нетипизированными (динамическими).
(как вариант храните тип в имени переменной)
__________________
RTFM


Последний раз редактировалось S-ed; 26.06.2011 в 13:30.
Старый 26.06.2011, 07:46
Zolza вне форума Посмотреть профиль Отправить личное сообщение для Zolza Найти все сообщения от Zolza
  № 15  
Ответить с цитированием
Zolza

Регистрация: Jun 2011
Сообщений: 31
S-ed, какой быдлокод, какое стахановское программирование? Кто все эти люди?. Выяснили уже, что нужен мне пул объектов, или сделать через ассоциативный массив, как частный способ. Всё.

Старый 26.06.2011, 11:28
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 16  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
или сделать через ассоциативный массив
Через объект. В АС3 нет ассоциативных массивов

Старый 26.06.2011, 11:39
S-ed вне форума Посмотреть профиль Отправить личное сообщение для S-ed Найти все сообщения от S-ed
  № 17  
Ответить с цитированием
S-ed
 
Аватар для S-ed

Регистрация: Jul 2001
Адрес: SPb.RU
Сообщений: 148
Отправить сообщение для S-ed с помощью ICQ
Zolza
Вы хотели пул объектов без самих объектов.

Вот через Object:
Код AS3:
var objectsArray:Object = new Object;
for(var i = 0; i < 5; i++){
    objectsArray["myVariableNum_" + i] = new Sprite;
}
 
for(var obj in objectsArray){
 trace(obj, "=", objectsArray[obj]);
}
Трейс:
Код:
myVariableNum_1 = [object Sprite]
myVariableNum_4 = [object Sprite]
myVariableNum_2 = [object Sprite]
myVariableNum_0 = [object Sprite]
myVariableNum_3 = [object Sprite]
__________________
RTFM


Последний раз редактировалось S-ed; 26.06.2011 в 11:51. Причина: забыл трейс
Старый 26.06.2011, 12:06
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 18  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
goodguy - Object, Dictionary и Array - ассоциативные массивы.
А вообще по-моему автору надо писать
Код AS3:
if(!var2) var2 = new var2Class();
и не страдать фигнёй. Это писать практически так же быстро, как и checkObj(var2), даже если там штук 5-10 таких переменных, но понятнее и работает быстрее.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 26.06.2011, 12:15
S-ed вне форума Посмотреть профиль Отправить личное сообщение для S-ed Найти все сообщения от S-ed
  № 19  
Ответить с цитированием
S-ed
 
Аватар для S-ed

Регистрация: Jul 2001
Адрес: SPb.RU
Сообщений: 148
Отправить сообщение для S-ed с помощью ICQ
-De-
Вы взяли код из #6? =)
"Человеку" хочется чтоб он мог отличить var2 от var1 когда передает их в функцию.
__________________
RTFM


Последний раз редактировалось S-ed; 26.06.2011 в 12:19.
Старый 26.06.2011, 12:26
Zolza вне форума Посмотреть профиль Отправить личное сообщение для Zolza Найти все сообщения от Zolza
  № 20  
Ответить с цитированием
Zolza

Регистрация: Jun 2011
Сообщений: 31
Цитата:
Сообщение от S-ed Посмотреть сообщение
Вы хотели пул объектов без самих объектов.
Вообще, с моим подходом, я много чего хотел "без самих объектов". С этим разобрался.
Цитата:
Сообщение от -De-
А вообще по-моему автору надо писать...
У меня так и было. Только много и в разных местах. Захотелось сделать красиво, так сказать, "вынести общий множитель за скобки". Ну а ваше решение из поста 11 - как раз тот самый "общий множитель".

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

Теги
typeof() , извлечение типа

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

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


 


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


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