为什么在第一个指令之前评估第二个指令?

时间:2016-07-13 22:03:01

标签: lua evaluation

我正在做一些计算,作为我要在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循环之外。

1 个答案:

答案 0 :(得分:5)

与许多其他语言中的许多其他输出函数一样,io.write输出被缓冲。它被评估,它只是你的输出现在在中间缓冲区挂起冲洗或填充此缓冲区。如果您现在需要数据,请添加io.flush()来电。