Определение 'eventHandlers.key_up' как глобального работает, но определение его как локального - нет.
local event = require "event"
local running = true
local function unknownEvent()
--
end
local eventHandlers = setmetatable({}, { __index = function () return unknownEvent end })
function eventHandlers.key_up(addr, char, code, playerName)
if (char == string.byte(" ")) then
running = false
end
end
local function handleEvent(eventID, ...)
if (eventID) then
eventHandlers[eventID](...)
end
end
while running do
handleEvent(event.pull ())
end
Это примерный обработчик событий, используемый модом OpenComputers для Minecraft.«Событие» - это, по сути, библиотека, которая извлекает сигналы с компьютера (в данном случае с клавиатуры) и сообщает компьютеру, что делать с событием.
Программа в основном ожидает в цикле внизу, слушаядля события.В этом примере прослушивается событие «key_up».Событие также дает дополнительную информацию, такую как адрес клавиатуры, нажатый символ, игрок, который его нажал и т. Д.
В этом примере поднятие пробела после нажатия (событие «key_down») прерывает циклвнизу, и программа завершается.
Я относительно новичок в кодировании lua, и я могу обходить относительно простой код, однако здесь я застрял.У меня есть два вопроса:
(1) Почему это работает, когда функция 'eventHandlers.key_up' определяется как глобальная, а не как локальная?
(2) Чтороль метатаблицы в этом коде?Я изучал метатаблицы и метаметоды, но мне трудно понять эту тему.
Открытые компьютеры - API: Событие
Я получаю ошибкуэто:
Line 11: '(' expected near '.'