为什么第二个指令比第一个指令先执行?

我正在为我打算在 PCCG Stack Exchange 上发布的问题准备一些测试用例进行计算,我注意到在像以下这样的代码片段中:

for i = 020 do
    io.write(i..": ")
    diff(i)
end

(其中 diff 是一个执行一些相当重的计算并打印结果的函数),diff 的结果首先被计算,并且只有在 i:diff 的结果打印后才能进行。

但是为什么会出现这种情况呢?难道我不应该在计算期间和之前看到 i:,只有在计算完成后才能看到计算结果吗?为什么它要等到 diff 执行之后呢?

我最开始使用 Luajit 时注意到了这一点,但它也会在普通Lua甚至for循环之外发生。

点赞
用户936986
用户936986

就像其他许多语言中的输出函数一样,io.write 输出也是带缓冲的。它已被评估,只是现在您的输出在中间缓冲区中等待刷新或填充该缓冲区。如果您需要立即通过数据,请添加一个 io.flush() 调用。

2016-07-13 22:09:38