Lua: запустить код во время ожидания ввода

В настоящее время я работаю над программой Lua. Я хочу использовать его в Minecraft с модом под названием "OpenComputers", который позволяет использовать сценарии 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, поэтому, пожалуйста, попробуйте дать простое решение и - если возможно - решение, которое не зависит от сторонних инструментов.

Спасибо:)

2 ответа

Если у вас есть некоторый опыт работы с открытыми компьютерами, вы можете добавить (n асинхронный) прослушиватель для "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. Это решается гораздо глубже, чем io.read и занимается проблемами, достаточно многочисленными, чтобы заполнить пару книг. Для lua vm вместо физического компьютера это может быть проще, но все равно нужно углубиться в то, как буквы кода превращаются в операции, выполняемые компьютером.

Похоже, что ваш мод уже подражает функциональности ОС для вас: 1, 2. Я верю, что вам будет лучше, если вы воспользуетесь предоставленной функциональностью.

Другие вопросы по тегам