Я безуспешно искал ответ на этот вопрос.Я нашел только примеры людей, передающих обратный вызов в функцию вызывающей стороны, но не видел, как вызывающая сторона фактически выполняет код функции обратного вызова внутри.Если бы кто-то мог дать мне пример и объяснение этого, это было бы очень полезно.
Я понимаю, как обратные вызовы работают с функциональной точки зрения, я использовал их на других языках.Я просто не могу понять синтаксис того, как сделать это правильно в lua.Я либо неправильно выполняю параметр обратного вызова, либо неправильно передаю его в функцию вызывающего абонента.
Вот некоторый псевдокод того, что я пытаюсь сделать, просто простой пример, чтобы я мог видеть, как он работает.(Я визуальный ученик)
callback = function ()
... do stuff ...
end
function caller(callback)
callback()
end
-- run caller function
caller(callback)
РЕДАКТИРОВАТЬ: Я получил несколько ответов о том, что мой пример выше работает, и кажется, что это действительно так.Спасибо вам за это, но я полагаю, что мне нужно получить более конкретную информацию, учитывая, что мой реальный код не работает, несмотря на правильный синтаксис.
Я делаю некоторое кодирование для сервера FiveM, который использует essentialmode.Я пытаюсь использовать обратный вызов в скрипте для очистки кода, но, похоже, он не запускает функцию обратного вызова.Вот фрагменты ...
Клиентский скрипт:
RegisterNetEvent("parachute:callback")
AddEventHandler('parachute:callback', function(callback)
print("callback...")
callback()
end)
Серверный скрипт:
callback = function ()
print("callback fired")
GiveWeaponToPed(GetPlayerPed(-1), GetHashKey("GADGET_PARACHUTE"), 150, true, true)
SetPedComponentVariation(GetPlayerPed(-1), 5, 1, 0, 0)
end
TriggerEvent('es:addCommand', 'callback', function(source, args, user)
TriggerClientEvent("parachute:callback", source, callback)
end, {help = "TEST"})
В приведенном выше примере функция print("callback...")
выполняется, нофункция callback()
не работает.Я могу сказать из-за операторов печати, которые я добавил.
Для большего контекста для тех из вас, кто не знаком с основным режимом или сценариями FiveM, есть загруженный клиентом сценарий и сценарий, загруженный сервером.На сервере TriggerEvent('es:addCommand', ... )
добавляет команду, которую можно выполнить с помощью /<cmd name>
.TriggerClientEvent()
запускает событие на клиенте через прослушиватель, созданный RegisterNetEvent()
и AddEventHandler()
.Как вы можете видеть, вы передаете функции обратного вызова этим функциям, чтобы сообщить им, что выполнять при запуске события.Сама функция обратного вызова просто дает парашют моему персонажу.Однако при вводе /callback
парашют не предоставляется.
Что не так, если синтаксис не такой, как я думал раньше?