Форум 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=165269)

JackFromChaos 21.08.2011 14:23

Вызов конструктора с произвольным числом параметров...
 
Доброго времени суток.
есть такая задача, надо сделать функцию типа:
Код AS3:

function createInstance(clazz:Class,params:Array):Object;

Я ее реализовал так:
Код AS3:

function createInstance(_class:Class,args:Array):Object
{
        switch(args.length)
        {
                case 0:
                        return new _class();
                case 1:
                        return new _class(args[0]);
                case 2:
                        return new _class(args[0],args[1]);
                case 3:
                        return new _class(args[0],args[1],args[2]);
                case 4:
                        return new _class(args[0],args[1],args[2],args[3]);
                case 5:
                        return new _class(args[0],args[1],args[2],args[3],args[4]);
//тут дописать еще много case-ов...
                default:
                        return new _class(args[0],args[1],args[2],args[3],args[4]);
 
        }
}

Но как то, это не радует... Может есть какой то более изящный способ? Ну по аналогии с Function::call?

КорДум 21.08.2011 14:25

...rest

Добавлено через 52 секунды
И циклы надо использовать, циклы.

nOobCrafter 21.08.2011 14:28

КорДум ...rest - тот же массив, что дадут циклы?
JackFromChaos только так, у конструктора нет методов call \ apply

КорДум 21.08.2011 14:29

Красивая запись. Цикл уберет тонну кейсов.

Добавлено через 2 минуты
Очень странный метод. Почему не сразу создавать нужный класс с параметрами? Зачем эти кейсы? В AS3 нет перегрузки, конструктор стабильно будет принимать только определенное количество параметров. Или плюс один ...rest

Добавлено через 5 минут
Код AS3:

function createInstance(_class:Class, ...args):Object {
    return new _class(args);
}

Все.

JackFromChaos 21.08.2011 14:48

На самом деле функция вырвана из контекста, это часть библиотеки аля Reflection.
Скажем так, есть класс Type, который должен реализовать метод
createInstance(...args):Object
Все что я знаю о типе, это его Class и результат работы функции describeType
КорДум:
Ваш вариант решения неприемлем. Как уже отметил nOobCrafter, rest - это тот же массив... Никаких требований к конструктору не должно быть... Ваш вариант будет работать только для конструкторов типа:
contructor(args:Array)

i.o. 21.08.2011 14:52

JackFromChaos, по-другому в этой ситуации не сделать. Вполне нормально со свитчем считаю.

JackFromChaos 21.08.2011 14:55

Спасибо. Я догадывался, что по другому не сделать, но решил спросить, а вдруг? ;)

i.o. 21.08.2011 15:07

Здесь уже была такая тема. Там тоже, насколько помню, не нашли изящного решения.
Попробуй поискать ее по форуму.

-De- 21.08.2011 15:09

Может, сделать, что у конструктора 0 параметров всегда, а параметры передавать в init какой-нить?

i.o. 21.08.2011 15:10

Цитата:

Может, сделать, что у конструктора 0 параметров всегда
Тут, видимо, рассматривается самый общий случай. Так что никак.


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

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