Lua-是否可以在“ ex.sleep”运行时停止输入?

时间:2018-12-25 00:26:21

标签: input lua sleep

我在互联网上找不到或找不到的基本内容: 我用于测试的小代码很简单:

require("ex")

a = true
b = nil

while (a == true) do
    b = io.read()
    ex.sleep(5)
    print(b)
end

非常简单。如果输入“ 1”(我正在使用记事本++和Windows命令提示符),它将等待5秒钟并打印,然后重复。但是我的问题是...如果我在睡眠的5秒钟内输入了更多的数字,当睡眠结束时,所有这些将自动按顺序执行。

有可能停止吗?我不希望在此期间读取任何输入。这些“鬼”输入存储在哪里?

1 个答案:

答案 0 :(得分:0)

您可以通过以字节为单位的“缓冲区大小”参数来控制读取:

b = io.read(1)

在这种情况下,读取是在从输入中获取第一个字节后完成的。其余输入字节可用于下一个“读取”语句。 重要说明:如果输入“ 1”并按“ Enter”,则将有3个字节可供读取(包括“ \ r \ n”)。

有关详细信息,请参见https://www.lua.org/pil/21.1.html

此外,您想知道一种在下次读取之前清理输入缓冲区的方法。这很容易:使用io.read(“ * line”)语句如下:

b = io.read("*line")  -- suppose, input is: "1234"
b = string.sub(b, 0, 1)
print(b)              -- prints 1

b = io.read("*line")  -- suppose, input is: "567"
b = string.sub(b, 0, 1)
print(b)              -- prints 5

b = io.read("*line")  -- suppose, input is: ""
b = string.sub(b, 0, 1)
print(b)              -- prints empty string

io.read(“ * line”)从输入中获取整行,但是您只能从其中获取第一个字符。