Jump to content

Рекурсивный вызов приватного метода


Recommended Posts

Доброго времени суток.

Прошу у Вас помощи, я не могу понять, как правильно передать фукнцию в аргументы.

Имеется следующий код:

Game = {};
function Game:new()
    game = {}
        function game:start()
            round:initialize(15);
        end

    round = {}
        function round:countdown(secondsToStart)
            if(secondsToStart > 0) then
                triggerEvent("onCountdown", getRootElement(), secondsToStart);
                setTimer(round:countdown, 1000, 1, secondsToStart - 1); -- Здесь ошибка.
            else
                triggerEvent("onRoundStarted", getRootElement());
            end
        end

        function round:initialize(countdown)
            addEvent("onCountdownStarted");
            round:countdown(countdown);
        end

    setmetatable(game, self);
    self.__index = self; 
    return game;
end

Комментарием указано, на какой строке вылетает ошибка.

 

Я хочу запустить рекурсивно приватную функцию с помощью таймера, но при передаче наименования фукнции, вылетает ошибка, что неправильно указана функция, а конкретнее:

Quote

function arguments expected near ,

Собственно, вопрос, как я могу это  исправить, что я делаю не так?

Link to comment

Синтаксическая ошибка в синтаксическом сахаре. Так как это метаметод, то Lua ожидает только его вызов после двоеточия.

В данном случае потребуется сделать

setTimer(round.countdown, 1000, 1, round, secondsToStart - 1);

 

Этот маленький код объяснит принцип работы:

game = {}

function game:test(arg1)
    print(self,arg1)
end

game:test("boo")
game.test(game,"boo2")
Output:
table: 00000000003d92c0	boo
table: 00000000003d92c0	boo2

 

Edited by SDraw
  • Like 1
  • Thanks 1
Link to comment
14 minutes ago, SDraw said:

Синтаксическая ошибка в синтаксическом сахаре. Раз метаметод, то должен исполнятся. Другого недозволено.

В данном случае потребуется сделать


setTimer(round.countdown, 1000, 1, round, secondsToStart - 1);

 

Этот маленький код объяснит принцип работы:


game = {}

function game:test(arg1)
    print(self,arg1)
end

game:test("boo")
game.test(game,"boo2")

Output:
table: 00000000003d92c0	boo
table: 00000000003d92c0	boo2

 

Благодарю за ответ! Всё работает, большое спасибо. Видимо, я где-то упустил этот момент. Возможно, Вы знаете какую-нибудь статью, отрывок в книге, где этот момент освещён? Я не припоминаю такого нигде. Заранее спасибо!

Edited by Dimosha
Link to comment
5 minutes ago, Dimosha said:

Благодарю за ответ! Всё работает, большое спасибо. Видимо, я где-то упустил этот момент. Возможно, Вы знаете какую-нибудь статью, отрывок в ниге, где этот момент освещён? Я не припоминаю такого нигде. Заранее спасибо!

Возможно, такие и статьи есть, но мне они неизвестны. Просто наткнулся на такое во время изучения метатаблиц, да и запомнилось.

Edited by SDraw
  • Like 1
  • Thanks 1
Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...