Передайте аргументы отложенной функции с помощью Haxe

Знаете ли вы, есть ли простой способ передать некоторые аргументы функции, вызываемой через

haxe.Timer.delay(func, delay);

Под «легким» я подразумеваю без создания собственного таймера.


person Johnny Oin    schedule 17.06.2010    source источник


Ответы (2)


Для этого вы можете использовать bind(). Например, если вы хотите позвонить someFunction("abc"):

haxe.Timer.delay(someFunction.bind("abc"), 1000); // 1s

До Haxe 3 вы могли использовать callback:

haxe.Timer.delay(callback(someFunction,"abc"), 1000); // 1s
person Andy Li    schedule 19.06.2010

Всего можно достичь с дополнительным уровнем косвенности :-)

Похоже, вам нужно замыкание, единственной задачей которого является вызов другой функции с аргументы.

Что-то вроде этого (не проверено):

haxe.Timer.delay(function () {
    func(arg1, arg2);
}, delay);
person Cameron    schedule 18.06.2010
comment
Кэмерон, единственная проблема в том, что функция будет рассматриваться как анонимная и удален весь контекст. В зависимости от вашей реализации это может быть проблемой. - person ; 07.10.2011
comment
@user: Вы правы, но я считаю, что в более поздних версиях HaXe закрытие охватывает весь контекст (this и все такое). - person Cameron; 31.05.2013
comment
На сегодняшний день delay в миллисекундах (например, 1000 вызывает задержку в одну секунду). - person ashes999; 30.05.2015