Lua中數(shù)字for循環(huán)實例
看以下代碼:
for i=1,2 do
print(i)
i=3
end
輸出是什么?如果習慣了C/C++語言,會覺得因為改變了控制變量i為3,所以在執(zhí)行第二次循環(huán)體之前判斷不通過,所以輸出是1。
但結(jié)果輸出是1和2,即雖然改變了i,但循環(huán)還是執(zhí)行了2次。這是為什么呢?
看了lua的源代碼,發(fā)現(xiàn)在語法分析階段,表達式中的i(也叫控制變量)和循環(huán)體中的i并不是一個值,其實表達式中的i叫internal index,循環(huán)體中的i叫external index。
所以在循環(huán)體中并沒有改變表達式中的i的值。
至于為什么lua要這樣做,估計是為了安全吧,怕在循環(huán)體中不經(jīng)意地改變了表達式的i,從而產(chǎn)生bug。
另外,在Progammming in Lua一書中也提到不要在循環(huán)體內(nèi)修改控制變量(實際修改的是external index)的值,否則會有不可預知的結(jié)果。
相關文章
Lua中的控制結(jié)構(gòu)(流程控制)簡明總結(jié)
這篇文章主要介紹了Lua中的控制結(jié)構(gòu)(流程控制)簡明總結(jié),本文講解了IF、repeat、while、for、break、return等語句,需要的朋友可以參考下2014-10-10
Lua教程(四):在Lua中調(diào)用C語言、C++的函數(shù)
這篇文章主要介紹了Lua教程(四):在Lua中調(diào)用C語言、C++的函數(shù),本文給出了多個示例講解如何在Lua中調(diào)用C/C++寫的函數(shù),需要的朋友可以參考下2014-09-09
Lua教程(二):C++和Lua相互傳遞數(shù)據(jù)示例
這篇文章主要介紹了Lua教程(二):C++和Lua相互傳遞數(shù)據(jù)示例,本文主要講解了基本數(shù)據(jù)類型的傳遞,比如整形(int)、字符串(string)、數(shù)字(number)及bool值,需要的朋友可以參考下2014-09-09

