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

Xpb7 21.11.2008 18:58

Цитата:

Сообщение от Smrad (Сообщение 778888)
То что кто-то не умеет использовать определенную технику, это не делает эту технику извратом.

У меня есть массив кнопок. Как в цикле повесить на них однотипные обработчики?

Так вы и не описали, зачем вам такая реализация. Правда, и в вашем случае это всё равно изврат, создавать функции в цикле.

Цитата:

Сообщение от __etc (Сообщение 778893)
Повторяться не буду:

http://www.flasher.ru/forum/showthread.php?t=113736

Отличная тема.

etc 21.11.2008 19:06

Smrad, какой класс проблем? Это универсальное решение для варианта «N данных для N кнопок».

Smrad 21.11.2008 19:18

Цитата:

Сообщение от Fernando Costa (Сообщение 778900)
создайте кнопке класс

Это все очевидно.
Я спрашивал о конкретном языковом механизме.

Добавлено через 4 минуты
Цитата:

Сообщение от __etc (Сообщение 778904)
Smrad, какой класс проблем? Это универсальное решение для варианта «N данных для N кнопок».

Проблема не в кнопках. А в создании функций в цикле.

etc 21.11.2008 19:25

Цитата:

Сообщение от Smrad (Сообщение 778910)
Проблема не в кнопках. А в создании функций в цикле.

Боже мой, зачем? Объясните, какая цель преследуется в создании кучи функций в цикле? Сколько я себя помню, ни разу у меня не возникала необходимость подобного.

iNils 21.11.2008 19:32

Цитата:

Сообщение от Smrad (Сообщение 778910)
А в создании функций в цикле.

Я вам еще раз повторяю - функции в цикле не создают. И не потому что я "не умею использовать определенную технику", а потому, что это не техника, а дилетантство.

Smrad 21.11.2008 21:09

Цитата:

Сообщение от __etc (Сообщение 778913)
Боже мой, зачем? Объясните, какая цель преследуется в создании кучи функций в цикле? Сколько я себя помню, ни разу у меня не возникала необходимость подобного.

Для того, чтобы не писать лишний код.

Добавлено через 6 минут
Цитата:

Сообщение от iNils (Сообщение 778915)
Я вам еще раз повторяю - функции в цикле не создают. И не потому что я "не умею использовать определенную технику", а потому, что это не техника, а дилетантство.

Так вы же не пробовали, откуда тогда знаете, что это дилетантство. Стало быть, всё функциональное программирование - дилетанство.

В общем какого-то изящного решения я не нашел, пришлось сделать в лоб.
Всем спасибо, тему можно закрыть.

iNils 21.11.2008 21:40

Цитата:

Сообщение от Smrad (Сообщение 778948)
Так вы же не пробовали, откуда тогда знаете, что это дилетантство.

Если сами не знаете, слушайте и учитесь у тех кто знает.
Код AS3:

var handler:Function = function(par:int) : Number {
        return par * par;
};
 
var ar : Array = new Array();
for (var i : int = 0; i < 10; i++) {
        var obj:Object = new Object ();
        obj.handler = handler;
        obj.i = i;
        ar.push (obj);
}
for (var j : int = 0; j < 10; j++) {
        trace (ar[j].handler (ar[j].i))
}

Отличии моего от вашего в том, что у меня одна копия на 10 объектов, а у вас 10 копий, по одной на каждый объект. А результат один и тот же.

etc 21.11.2008 22:33

Цитата:

Сообщение от Smrad (Сообщение 778948)
Для того, чтобы не писать лишний код.

Добиться небольшого количества кода можно и без засорения памяти одинаковыми неудаляемыми функциями.

kackbip 22.11.2008 13:54

Автору.
Вобщем-то все работает у вас правильно.
Вы написали в цикле trace(i); и у вас трейсится значение переиенной i. В чем проблема? :) Если вы хотите другого результата то поменяйте логику.

Smrad 29.11.2008 14:52

Чтобы не создавать лишнюю тему, отпишу здесь.

Описанный __ect способ работает не совсем корректно. Дело в том что таржет и "то на что вешали листенер" могут не совпадать. Это бывает если "то на что вешали листенер" имеет потомков (в смысле child'ов).

Замыканий в as3, как оказалось, нет. Жаль. Зато есть динамические поля, применяя которые, можно получить такой же эффект.


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

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