3

我目前正在开发一个 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 比较陌生,所以请尝试提供一个简单的解决方案,并且 - 如果可能的话 - 一个不依赖第三方工具的解决方案。

谢谢 :)

4

2 回答 2

1

如果您对 opencomputers 有一定的经验,您可以为“key_down”添加一个(n 异步)侦听器,并将用户输入存储在一个字符串(或任何您想要的)中。

例如:

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)
于 2021-08-08T08:06:36.080 回答
1

运行多个任务是操作系统解决的一个非常广泛的问题,而不是 Lua 解释器那么简单。它解决的层次比它要深得多io.read,并且处理的麻烦足以填满几本书。对于 lua vm 而不是物理计算机,它可能更简单,但仍然需要深入研究如何将代码字母转换为计算机执行的操作。

你的那个 mod 似乎已经为你模拟了 os 功能:12。我相信通过使用所提供的功能你会变得更好。

于 2018-08-07T09:44:18.200 回答