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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 27.11.2011, 14:22
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 31  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
А я до сих пор не увидел опровержений слов Wolsh'а.
Мы имеем дело с JIT, посему, вполне возможно, классы с захардкоденными типами вектора создаются в рантайме.

Старый 27.11.2011, 15:56
Inet_PC вне форума Посмотреть профиль Отправить личное сообщение для Inet_PC Посетить домашнюю страницу Inet_PC Найти все сообщения от Inet_PC
  № 32  
Ответить с цитированием
Inet_PC
 
Аватар для Inet_PC

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Цитата:
Я хоть убей не понимаю, как может "вектор, у которого все элементы могут быть только Спрайтами", перекастован в "вектор, у которого элементы могут быть чем угодно".
Ну хотябы не во что угодно, а в базовый класс например:
Код AS3:
var v: Vector.<MySprite> = new Vector.<MySprite>();
trace(v === Vector.<DisplayObject>(v));//false, т.к. это уже новый вектор
В таком случае хоть как-то но можно было бы работать.
Цитата:
Более того я могу создавать вектор любого типа в run time.

Очень интересно взглянуть.
Собственно fljot Вам ответил.

Цитата:
То, что хак с getDefinitionByName работает, конечно грубость,
Это не хак, нет дженириков да, а вектор просто массив с проверкой на тип в рантайм.

Цитата:
Тем не менее в поведении as3-шного вектора я не вижу ничего непредсказуемого или нелогичного.
Может это конечно и предсказуемо и логично, но не удобно, имхо конечно же.
Цитата:
А я до сих пор не увидел опровержений слов Wolsh'а.
Мы имеем дело с JIT, посему, вполне возможно, классы с захардкоденными типами вектора создаются в рантайме.
В этом файле есть приватный сеттер "type", если бы класс создавался в рантайм его бы не потребовалось:
Код AS3:
private function newThisType(length:uint=0) : Vector$object {
                 var v : Vector$object = new Vector.<type>(length);
                 //v.type = this.type;
                 return v;
             }
Раньше видимо было написано так:
Код AS3:
private function newThisType(length:uint=0) : Vector$object {
                 var v : Vector$object = new Vector(length);
                 v.type = this.type;
                 return v;
             }
плюс кастинг по всему вектору:
Код AS3:
private static function castToThisType(item) : Vector$object { return item;}
При создании класса в рантайм явный вызов castToThisType не потребовался бы.
Поправьте если я не прав.
__________________
http://www.chessmax.ru

Старый 27.11.2011, 16:47
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 33  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
Весьма любопытно, спасибо.
Скорее, Ваша правда.

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
...если бы класс создавался в рантайм его бы не потребовалось:
Вы имели ввиду на этапе компиляции?
Цитата:
плюс кастинг по всему вектору
Кастинг все равно нужен для добавления потомков базового класса.
__________________
משיח לא בא
משיח גם לא מטלפן

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

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Цитата:
Вы имели ввиду на этапе компиляции?
Да тупанул, именно это и хотел написать.
Цитата:
Кастинг все равно нужен для добавления потомков базового класса.
А пример можно? Если честно не понял.
__________________
http://www.chessmax.ru


Последний раз редактировалось Inet_PC; 27.11.2011 в 17:28.
Старый 27.11.2011, 17:49
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 36  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Ну хотябы не во что угодно, а в базовый класс например
Может у меня осеннее обострение, но я Вас упорно не понимаю. Попробую объяснить, что меня смущает.
Вектор типа DisplayObject может принимать экземпляры Sprite, это естественно. Но с какой стати вектор типа Sprite должен принимать DisplayObject? Например, TextField?
Повторюсь – я вижу баг не в том, как принимают аргумент функции, я считаю что как раз здесь все кошерно. Не кошерно, что компилятор позволяет создавать переменную типа Vector.<*> или Vector.<superclass> и записывать туда ссылку на созданный вектор конкретного подкласса. Получается, что у Вас есть вектор, принимающий любые типы (*) или подтипы superclass, о чем говорит тип переменной. Но на деле эта переменная указывает на вектор, способный работать только с конкретным типом.
Код AS3:
var a:DisplayObject = new Sprite(); // все кошерно
Код AS3:
var v:Vector.<DisplayObject> = new Vector.<Sprite>();
– не должно работать, так как подразумевает, что "в ячейки" типа Sprite могут быть записаны объекты типа DisplayObject. Дело то не в том, что уже записанные спрайты могут быть прочитаны как ДисплейОбжекты, это то естественно. Дело в том, как Вы будете дальше добавлять в этот вектор новые элементы? При записи то ситуация с типом "перевенута", и получается (псевдокод):
Код AS3:
( (Vector.<Sprite>[2]:Sprite) as DisplayObject ) = new Bitmap();
Если бы создавался новый экземпляр вектора типа DisplayObject, способный работать с элементами типа DisplayObject, и заполнялся спрайтами из вектора типа Спрайт, то проблем нет. Но переменная только ссылается на экземпляр вектора типа Спрайт. Его элементы могут читаться в переменные типа DisplayObject
Код AS3:
var a:DisplayObject = v[2]:Sprite; // все кошерно
//но никак нельзя записать в v[2] любой DisplayObject
v[2]:Sprite = a:DisplayObject;
__________________
Reality.getBounds(this);

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
А пример можно? Если честно не понял.
Добавить Sprite в вектор с DisplayObject.

Добавлено через 14 минут
Пардон, посмотрел еще раз. Эта функция используется, в основном, в VectorImpl и, судя по-всему, предназначена для "замены" дженериков.

Добавлено через 17 минут
Кстати, можно попробовать воспользоваться способом использованным в VectorImpl (не проверял)
Код AS3:
obj.AS3::pop();
__________________
משיח לא בא
משיח גם לא מטלפן


Последний раз редактировалось alatar; 27.11.2011 в 18:13.
Старый 27.11.2011, 18:24
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 38  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
alatar это что за хитрый способ?
__________________
Марк Tween

Старый 27.11.2011, 18:30
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 39  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
alatar это что за хитрый способ?
вызов метода pop, через неймспейс AS3

Старый 27.11.2011, 23:56
Inet_PC вне форума Посмотреть профиль Отправить личное сообщение для Inet_PC Посетить домашнюю страницу Inet_PC Найти все сообщения от Inet_PC
  № 40  
Ответить с цитированием
Inet_PC
 
Аватар для Inet_PC

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Wolsh
Я полностью с Вами согласен, это не правильно:
Цитата:
var v:Vector.<DisplayObject> = new Vector.<Sprite>();
Но раз нет дженириков, пример выше в корне неверен, тогда как мне работать с разными векторами, самому копировать каждый раз функцию? В общем вектор в текущей реализации мне не удобен.
Что Вы чаще в своих проектах используете вектор или массив?
__________________
http://www.chessmax.ru


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

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

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


 


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


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