Lua中數字for循環實例

Lua中數字for循環實例

https://www.jb51.net/article/64701.htm

看以下代碼:

 

複製代碼 代碼如下:


for i=1,2 do 
  print(i) 
  i=3 
end 


輸出是什麼?如果習慣了C/C++語言,會覺得因爲改變了控制變量i爲3,所以在執行第二次循環體之前判斷不通過,所以輸出是1。
但結果輸出是1和2,即雖然改變了i,但循環還是執行了2次。這是爲什麼呢?

 

看了lua的源代碼,發現在語法分析階段,表達式中的i(也叫控制變量)和循環體中的i並不是一個值,其實表達式中的i叫internal index,循環體中的i叫external index。

所以在循環體中並沒有改變表達式中的i的值。

至於爲什麼lua要這樣做,估計是爲了安全吧,怕在循環體中不經意地改變了表達式的i,從而產生bug。

另外,在Progammming in Lua一書中也提到不要在循環體內修改控制變量(實際修改的是external index)的值,否則會有不可預知的結果。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章