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

MikroAcse 18.02.2012 21:45

Как передать переменную в функцию?
 
Уже просмотрел 3 темы, 2 записи, 4 сайта - ничего не нашел!

Например, есть функция:
Код AS3:

function blabla(){
 
}

Как мне передать в нее переменную.
Читал что надо использовать apply() , но так и не понял как ним пользоваться.

Добавлено через 33 секунды
И вообще, это возможно?

КорДум 18.02.2012 21:48

Что для Вас есть "переменная"?
Код AS3:

private function foo(param:uint, str:String, obj:Object):void

Передавайте: foo(1, "123", { });

MikroAcse 18.02.2012 21:54

Хм... ну как же объяснить?
Добавлено через 1 секунду
Вот, например:
Код AS3:

public static function repeatFunction(countsOfRepeat:Number,functionToRepeat:Function){
                        for(var iR=0;iR<countsOfRepeat;iR++){
                                var newfunctionToRepeat:Function=functionToRepeat;
                                newfunctionToRepeat.apply(null, [iR]);
                                newfunctionToRepeat();
                        }
                }

Вызываю:
Код AS3:

import mClasses.mUtils.*
 
MSomeUtils.repeatFunction(10,traceIt)
 
function traceIt(){
 
}

Ошибка:
Цитата:

ArgumentError: Error #1063: Несоответствие количества аргументов в libtest_fla::MainTimeline/traceIt(). Ожидалось 0, получено 1.
at Function/http://adobe.com/AS3/2006/builtin::apply()
at mClasses.mUtils::MSomeUtils$/repeatFunction()
at libtest_fla::MainTimeline/frame1()
Теперь как правильно этим пользоваться?

КорДум 18.02.2012 21:55

Зачем такие извращения?
Код AS3:

functionToRepeat(null, Array(iR));


MikroAcse 18.02.2012 21:56

Ой не то, исправил.

КорДум 18.02.2012 21:57

Мой ответ от этого не шибко изменится.

СлаваRa 18.02.2012 22:10

У вас функция приемник, ничего не принимает, а вы пытаетесь запихать в нее массив, поэтому вылетает ошибка.
А можете объяснить ход вашей мысли, когда вы писали вот этот блок кода?
Код AS3:

var newfunctionToRepeat:Function=functionToRepeat;
newfunctionToRepeat.apply(null, [iR]);
newfunctionToRepeat();

почитайте внимательно:
Function.#apply()
Function#call()

MikroAcse 18.02.2012 22:11

Все, решил проблему.
Код AS3:

public static function repeatFunction(countsOfRepeat:Number,functionToRepeat:Function){
                        var newfunctionToRepeat:Function=functionToRepeat;
                        var arrayOfFunction:Array=[]
                        for(var iR=0;iR<countsOfRepeat;iR++){
                                arrayOfFunction=new Array(newfunctionToRepeat.length)
                                arrayOfFunction[newfunctionToRepeat.length-1]=iR
                                newfunctionToRepeat.apply(null, arrayOfFunction);
                        }
                }

Вызываю:
Код AS3:

import mClasses.mUtils.*
 
MSomeUtils.repeatFunction(10,traceIt)
 
 
function traceIt(tra:Number,bla:Number){
  trace(bla)
  /*
0
1
2
3
4
5
6
7
8
9
*/

 
}


Silicium 18.02.2012 22:13

Код:

А можете объяснить ход вашей мысли
И все-таки? Меня тоже интересует. Сами ведь фанат простоты)

КорДум 18.02.2012 22:17

Великий Мук, пожалуйста, почините пробел у себя на клавиатуре.
Код AS3:

repeatFunction(10, trace, [1, 2, 3]);
 
public static function repeatFunction(count:uint, foo:Function, params:Array):void {
        for (var i:uint = 0; i < count; i++)
                foo.apply(null, params);
}

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

repeatFunction(10, trace, 1, 2, 3);
 
public static function repeatFunction(count:uint, foo:Function, ...params):void {
        for (var i:uint = 0; i < count; i++)
                foo.apply(null, params);
}

А так кошернее. Только я не могу придумать ни одного случая, где бы пригодилась Ваша функция. Ну да ладно.


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

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