Dimosha Posted October 24, 2017 Share Posted October 24, 2017 Доброго времени суток. Прошу у Вас помощи, я не могу понять, как правильно передать фукнцию в аргументы. Имеется следующий код: 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
SDraw Posted October 24, 2017 Share Posted October 24, 2017 (edited) Синтаксическая ошибка в синтаксическом сахаре. Так как это метаметод, то 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 October 24, 2017 by SDraw 1 1 Link to comment
Dimosha Posted October 24, 2017 Author Share Posted October 24, 2017 (edited) 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 October 24, 2017 by Dimosha Link to comment
SDraw Posted October 24, 2017 Share Posted October 24, 2017 (edited) 5 minutes ago, Dimosha said: Благодарю за ответ! Всё работает, большое спасибо. Видимо, я где-то упустил этот момент. Возможно, Вы знаете какую-нибудь статью, отрывок в ниге, где этот момент освещён? Я не припоминаю такого нигде. Заранее спасибо! Возможно, такие и статьи есть, но мне они неизвестны. Просто наткнулся на такое во время изучения метатаблиц, да и запомнилось. Edited October 24, 2017 by SDraw 1 1 Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now