为什么第二个指令在第一个指令之前被评估?
Why is the second instrution evaluated before the first one?
我正在做一些计算以用作我将要在 PCCG Stack Exchange 上 post 的问题的测试用例,我注意到在这样的一段代码中:
for i = 0, 20 do
io.write(i..": ")
diff(i)
end
(其中 diff
是一个执行大量计算并打印结果的函数),首先计算 diff
的结果,然后才计算 i:
和diff
的结果被打印出来。
但是为什么会这样呢?我不应该在计算之前和期间看到 i:
,并且只有在之后才能看到计算结果吗?为什么之前要等diff
执行?
我第一次注意到这个是使用 Luajit,但它也发生在 vanilla Lua 甚至在 for
循环之外。
正如许多其他语言中的许多其他输出函数一样,io.write
输出是缓冲的。它经过评估,只是您的输出现在位于中间缓冲区中,等待刷新或填充此缓冲区。如果您需要立即处理数据,请添加 io.flush()
调用。
我正在做一些计算以用作我将要在 PCCG Stack Exchange 上 post 的问题的测试用例,我注意到在这样的一段代码中:
for i = 0, 20 do
io.write(i..": ")
diff(i)
end
(其中 diff
是一个执行大量计算并打印结果的函数),首先计算 diff
的结果,然后才计算 i:
和diff
的结果被打印出来。
但是为什么会这样呢?我不应该在计算之前和期间看到 i:
,并且只有在之后才能看到计算结果吗?为什么之前要等diff
执行?
我第一次注意到这个是使用 Luajit,但它也发生在 vanilla Lua 甚至在 for
循环之外。
正如许多其他语言中的许多其他输出函数一样,io.write
输出是缓冲的。它经过评估,只是您的输出现在位于中间缓冲区中,等待刷新或填充此缓冲区。如果您需要立即处理数据,请添加 io.flush()
调用。