在Lua中for語句跟其他語言的for類似,語法上有一點點區別。Lua的for語句有兩種:數字型和泛型
數字型:
- for var=exp1,exp2,exp3 do
- <執行體>
- end
var從exp1變化到exp2,每次變化以exp3為步長遞增var,並執行一次“執行體”。exp3是可選的,如果不指定,默認為1。例如
- for i=1,f(x) do print(i) end
- for i=10,1,-1 do print(i) end
for的三個表達式在循環開始前一次性求值,以后不再進行求值。比如上面的f(x)只會在循環開始前執行一次,其結果用在后面的循環中。
可以驗證如下:
- #!/usr/local/bin/lua
- function f(x)
- print("function")
- return x*2
- end
- for i=1,f(5) do print(i)
- end
輸出:
- function
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
可以看到 函數f(x)只在循環開始前執行一次。
泛型:泛型for循環通過一個迭代器函數來遍歷所有值,類似java中的foreach語句
- --打印數組a的所有值
- for i,v in ipairs(a) do print(v) end
i是數組索引值,v是對應索引的數組元素值。ipairs是Lua提供的一個迭代器函數,用來迭代數組。
例如
- #!/usr/local/bin/lua
- days = {"Suanday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"
- }
- for i,v in ipairs(days) do print(v) end
輸出
- Suanday
- Monday
- Tuesday
- Wednesday
- Thursday
- Friday
- Saturday
關於迭代器,以后再寫。
打完收工