Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Несоответствие типов (http://www.flasher.ru/forum/showthread.php?t=215653)

Appleman 18.09.2018 19:05

Несоответствие типов
 
Друзья, помогите, плиз. Столкнулся сегодня с непонятной мне проблемой.
Имею вот такие присвоения:

Код AS3:

        public class ActionEntity extends EventDispatcher
        {
                protected var _recipientMiscEffects: Vector.<CUEntity> = new Vector.<CUEntity>; // Вектор прочих обновлений реципиента в формате CharacterUpdates
 
                public function execute() : void // Запуск действия
                {                       
                        if (_contact.recipientReadyUpdates) _recipientMiscEffects.push (_contact.recipientReadyUpdates);
                }
        }
 
        public class ContactEntity
        {
                private var _recipientReadyUpdates: Vector.<CUEntity> = new Vector.<CUEntity>;        // Готовые пакеты обновлений для реципиента
 
                public function get recipientReadyUpdates() : Vector.<CUEntity> {return _recipientReadyUpdates}
        }

Вроде всё просто как грабли, но в рантайме получаю исключение:

[Fault] exception, information=TypeError: Error #1034: Type Coercion failed: cannot convert __AS3__.vec::Vector.<data.characterUpdates::CUEntity>@7bc5281 to data.characterUpdates.CUEntity.

Что за фигня? Никогда такого не встречал. Тип точно один и тот же. Единственное, что в векторе <CUEntity> могут встречаться экземпляры его наследников, но это никогда не мешало... В общем, я в полном тупике и не понимаю, где проверять.

Спасибо.

Wolsh 19.09.2018 07:54

Ну, у тебя вектор для элементов CUEntity, а ты суешь в него не CUEntity, а вектора.
_recipientMiscEffects.push (_contact.recipientReadyUpdates);

Текст ошибки говорит сам за себя: "Не могу сконвертировать Вектор.<CUEntity> в CUEntity".

Appleman 19.09.2018 09:52

wolsh, привет, рад видеть :)

Спасибо, и правда. Как-то я неадекватно хелп понял. Специально про push почитал, что принимает он один или несколько элементов для добавления в массив. Но вот почему я решил, что эти "несколько" можно упаковать в вектор, сам не понимаю :)

По итогу выкрутился топорно: пробежал через while и поэлементно перенёс, хотя это конечно порно.

ZergMaster 19.09.2018 16:51

а может быть проще будет сделать слияние?
Код AS3:

if (_contact.recipientReadyUpdates) _recipientMiscEffects.concat(_contact.recipientReadyUpdates);


СлаваRa 19.09.2018 19:53

@ZergMaster ну создал ты новую коллекцию из двух, которую потом не используешь, и зачем?

ZergMaster 20.09.2018 19:25

СлаваRa почему не используешь? Я так понял, человеку нужно было сложить два вектора, для чего он пытался использовать push, но когда не вышло - делает push перебором через while. Вот я и предложил использовать concat

СлаваRa 20.09.2018 20:20

concat - не модифицирует исходный вектор, в отличие от splice

ZergMaster 24.09.2018 12:47

а, ну да.
Код AS3:

var _tempRecipientMiscEffects: Vector.<CUEntity> = _recipientMiscEffects;
_recipientMiscEffects = _contact.recipientReadyUpdates ? _tempRecipientMiscEffects.concat(_contact.recipientReadyUpdates) : _tempRecipientMiscEffects;



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

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