看以下代碼:
復(fù)制代碼 代碼如下:
for i=1,2 do
print(i)
i=3
end
輸出是什么?如果習(xí)慣了C/C++語言,會(huì)覺得因?yàn)楦淖兞丝刂谱兞縤為3,所以在執(zhí)行第二次循環(huán)體之前判斷不通過,所以輸出是1。
但結(jié)果輸出是1和2,即雖然改變了i,但循環(huán)還是執(zhí)行了2次。這是為什么呢?
看了lua的源代碼,發(fā)現(xiàn)在語法分析階段,表達(dá)式中的i(也叫控制變量)和循環(huán)體中的i并不是一個(gè)值,其實(shí)表達(dá)式中的i叫internal index,循環(huán)體中的i叫external index。
所以在循環(huán)體中并沒有改變表達(dá)式中的i的值。
至于為什么lua要這樣做,估計(jì)是為了安全吧,怕在循環(huán)體中不經(jīng)意地改變了表達(dá)式的i,從而產(chǎn)生bug。
另外,在Progammming in Lua一書中也提到不要在循環(huán)體內(nèi)修改控制變量(實(shí)際修改的是external index)的值,否則會(huì)有不可預(yù)知的結(jié)果。
您可能感興趣的文章:- Lua編程示例(三):稀疏表、雙端隊(duì)列、格式化輸出、表和循環(huán)表的格式化輸出
- Lua編程中使用嵌套循環(huán)的使用教程
- Lua中的repeat...until循環(huán)語句使用教程
- 詳解Lua中repeat...until循環(huán)語句的使用方法
- Lua中for循環(huán)語句的使用教程
- 詳解Lua中的while循環(huán)語句的使用
- Lua中變相實(shí)現(xiàn)continue跳出循環(huán)
- Lua中的for循環(huán)和迭代器的秘密探究
- Lua中三種循環(huán)語句的使用講解