【发布时间】:2019-04-12 10:03:45
【问题描述】:
将 '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
这是一个用于 Minecraft 的 OpenComputers 模组的示例事件处理程序。 “事件”基本上是一个库,它从计算机中提取信号(在本例中为键盘输入)并告诉计算机如何处理该事件。
程序基本上在底部的循环中等待,监听一个事件。此示例侦听“key_up”事件。该事件还提供其他信息,例如键盘地址、按下的字符、按下它的玩家等。
在此示例中,按下后抬起空格键('key_down' 事件)会在底部中断循环并终止程序。
我对 lua 编码比较陌生,我可以处理相对简单的代码,但是在这里我被卡住了。我有两个问题:
(1) 为什么在'eventHandlers.key_up'函数定义为全局的时候可以,而定义为局部的时候不行?
(2) 元表在这段代码中的作用是什么?我一直在研究元表和元方法,但我发现它很难掌握。
我得到的错误是这样的:
Line 11: '(' expected near '.'
【问题讨论】:
标签: variables lua global local metatable