Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Обертка для NetConnection.call (http://www.flasher.ru/forum/showthread.php?t=119828)

kutuzov 02.01.2009 14:02

Обертка для NetConnection.call
 
Как передать в call параметры, которые переданы в send?

Код AS3:

public function send(command:String, ...parameters):void {
        call(command, responder, parameters);
}

При передаче в send более одного parameters AMFPHP ругается что "Missing argument 2", то есть получается что call принимает parameters как один аргумент.

DarkLight 02.01.2009 14:15

parameters - массив, поэтому оно и принимает их как один аргумент.
Используйте Function.apply
Код AS3:

public function send(command:String, ...parameters):void {
        call.apply(this,[command, responder].concat(parameters));
}


BlooDHounD 02.01.2009 18:16

так мне кажется красивше:
Код AS3:

public function send(command:String, ...parameters):void {
        parameters.unshift( command, responder );
        call.apply( this, parameters );
}


kutuzov 02.01.2009 18:55

BlooDHounD, не только красивше, но и быстрее в три раза
Код AS3:

var len:uint = 1000000;
 
var command:String = "qwe";
var responder:Responder = new Responder(function(e:Object):void{});
 
var time:int;
var i:uint;
 
time = getTimer();
for (i=0; i<len; i++) {
        ([command, responder]).concat([1, 1, "qweqweqweqweqwe"]);
}
trace(getTimer() - time)
 
time = getTimer();
for (i=0; i<len; i++) {
        ([1, 1, "qweqweqweqweqwe"]).unshift(command, responder);
}
trace(getTimer() - time)


DarkLight 02.01.2009 19:15

Ну логично что быстрее) новый массив не создается) Просто я более короткий вариант написал)


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

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