Lua - 可以在"ex.sleep"运行时停止输入吗?

我无法理解或在互联网上找到的基本内容: 我用于测试的小代码非常简单:

require(“ex”)

a = true
b = nil

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

非常简单。如果我输入“1”(我正在使用notepad ++和windows命令提示符),它将等待5秒并打印它,然后重复。但是我的问题是......如果我在休眠5秒钟期间输入了更多数字,当休眠结束时,它们都将自动按顺序执行。

有没有办法停止这个?我不希望在那段时间内读取任何输入。这些“ghost”输入在哪里存储?

点赞
用户10805162
用户10805162

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

b = io.read(1)

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

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

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

b = io.read("*line")  -- 假设输入为:“1234”
b = string.sub(b, 0, 1)
print(b)              -- 输出 1

b = io.read("*line")  -- 假设输入为:“567”
b = string.sub(b, 0, 1)
print(b)              -- 输出 5

b = io.read("*line")  -- 假设输入为空字符串:“”
b = string.sub(b, 0, 1)
print(b)              -- 输出空字符串

io.read(“*line”)从输入中获取整行,但您可以仅从中获取第一个字符。

2018-12-25 19:48:38