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