我正在做一些计算,作为我要在PCCG Stack Exchange上发布的问题的测试用例,我注意到在这样的代码中:
for i = 0, 20 do
io.write(i..": ")
diff(i)
end
Run Code Online (Sandbox Code Playgroud)
(其中diff是一个执行一些非常繁重的计算并打印结果的函数),diff首先计算结果,然后才打印i:结果diff.
但为什么会这样呢?我不应该i:在计算之前和期间看到,而且计算结果只能在之后?为什么要等待diff执行呢?
我首先注意到这是使用Luajit,但它也发生在vanilla Lua上,甚至在for循环之外.
与许多其他语言中的许多其他输出函数一样,io.write输出也是缓冲的.它被评估,它只是你的输出现在在中间缓冲区等待刷新或填充此缓冲区.io.flush()如果您现在需要数据,请添加电话.