Lua: 运行 代码等待输入
Lua: run code while waiting for input
我目前正在研究一个 lua 项目。
我想在 Minecraft 中使用名为 "OpenComputers" 的 mod,它允许在模拟系统上使用 lua 脚本。
我正在处理的程序相对简单:您有一个控制台,然后输入一个命令来控制一台机器。
它看起来像这样:
while(true) do
io.write("Enter command\n>")
cmd = io.read()
-- running code to process the command
end
但问题是:我需要一个后台例程运行来检查机器提供的数据。
while(true) do
-- checking and reacting
end
我怎样才能完成这项工作?
- 我无法在等待
io.read()
时跳转到协程
- 有人使用命令后检查是不够的(有时我几天不使用它但我仍然要关注它)
我对 lua 比较陌生,所以请尝试提供一个简单的解决方案,并且 - 如果可能的话 - 一个不依赖第三方工具的解决方案。
谢谢:)
运行多任务是操作系统解决的一个非常广泛的问题,而不是Lua解释器这么简单的问题。它在比 io.read
更深的层次上得到解决,并且处理的问题足以填满几本书。对于luavm而不是物理计算机,它可能更简单,但仍然需要深入研究代码字母如何转化为计算机执行的操作。
如果您有一些使用开放计算机的经验,您可以为“key_down”添加一个(异步)侦听器,并将用户输入存储在一个字符串(或任何您想要的)中。
例如:
local userstr = ""
function keyPressed(event_name, player_uuid, ascii)
local c = string.char(ascii)
if c=='\n' then
print(userstr)
userstr = ""
else
userstr=userstr..c
end
--stores keys typed by user and prints them as a string when you press enter
end
event.register("key_down", keyPressed)
我目前正在研究一个 lua 项目。 我想在 Minecraft 中使用名为 "OpenComputers" 的 mod,它允许在模拟系统上使用 lua 脚本。 我正在处理的程序相对简单:您有一个控制台,然后输入一个命令来控制一台机器。 它看起来像这样:
while(true) do
io.write("Enter command\n>")
cmd = io.read()
-- running code to process the command
end
但问题是:我需要一个后台例程运行来检查机器提供的数据。
while(true) do
-- checking and reacting
end
我怎样才能完成这项工作?
- 我无法在等待
io.read()
时跳转到协程
- 有人使用命令后检查是不够的(有时我几天不使用它但我仍然要关注它)
我对 lua 比较陌生,所以请尝试提供一个简单的解决方案,并且 - 如果可能的话 - 一个不依赖第三方工具的解决方案。
谢谢:)
运行多任务是操作系统解决的一个非常广泛的问题,而不是Lua解释器这么简单的问题。它在比 io.read
更深的层次上得到解决,并且处理的问题足以填满几本书。对于luavm而不是物理计算机,它可能更简单,但仍然需要深入研究代码字母如何转化为计算机执行的操作。
如果您有一些使用开放计算机的经验,您可以为“key_down”添加一个(异步)侦听器,并将用户输入存储在一个字符串(或任何您想要的)中。
例如:
local userstr = ""
function keyPressed(event_name, player_uuid, ascii)
local c = string.char(ascii)
if c=='\n' then
print(userstr)
userstr = ""
else
userstr=userstr..c
end
--stores keys typed by user and prints them as a string when you press enter
end
event.register("key_down", keyPressed)