Передача параметров в ссылку на функцию? - PullRequest
1 голос
/ 18 августа 2010

Я пытаюсь написать функцию тестирования производительности, которая может принимать любую функцию, запускать ее X раз и подсказать, сколько времени понадобилось этой функции для запуска в AS3.У меня все работает нормально, если функция не принимает никаких параметров, но в противном случае она выдает ошибку.

Вот код:

public static function testFunction(targetFunction : Function, object : Object, ... parameters)
{
    var iterations : int = 10000;
    var i : int = 0;
    var time0 : Number = 0;
    var time1 : Number = 0;

    if (parameters.length == 0)
    {
        time0 = getTimer();

        for (i = 0; i < iterations; ++i)
        {
            targetFunction();
        }

        time1 = getTimer();
    }
    else
    {
        time0 = getTimer();

        for (i = 0; i < iterations; ++i)
        {
            targetFunction.call(object, parameters);
        }

        time1 = getTimer();
    }

    trace("Took " + (time1 - time0) + "ms to complete " + iterations + " iterations");
}

Это прекрасно работает:testFunction (timelineMethod)

Но что-то вроде этого: testFunction (game.addGameState, game, gameState);// gameState будет иметь параметры

. Выдает следующее: Ошибка типа: Ошибка # 1034: Ошибка приведения типа: невозможно преобразовать [] @ 2f46491 в g2d.GameStateat Function / http://adobe.com/AS3/2006/builtin::call()

Похоже, game или gameState не будут действительными экземплярами, но они определенно есть.Поэтому я предполагаю, что он каким-то образом не знает, к какому объекту принадлежит метод, который должен быть проверен, и выдает эту ошибку.

Есть идеи?

1 Ответ

2 голосов
/ 18 августа 2010

function.call требует список параметров, такой же, как если бы вы вызывали функцию в обычном режиме.

Если вы хотите передать массив параметров, вы должны использовать function.apply.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...