每日一Lua(2)-语句
1.局部變量
局部變量的聲明關鍵字:local.
局部變量的作用域是聲明塊,指的是函數體,或者是一個chunk。
例子:
local a,b=1,10 if a<b thenprint(a)local aprint(a) end print(a,b)
可以用do..end語言來控制局部變量的作用域,例如求解二元一次方程二元一次:
a,b,c=1,4,1 dolocal a2=2*alocal delta=(b^2-4*a*c)^(1/2)x1=(-b+delta)/a2x2=(-b-delta)/a2 end print(x1,x2)a2和delta都聲明為局部變量,在chunk運行結束之后思動銷毀。
在Lua中應當盡可能地去使用local聲明,因為:
1)可以不影響全局成員的情況下重復使用變量名;
2)使用局部變量會更快一些;
3)當局部變量的chunk代碼執行完畢,局部變量就會自動釋放被占用的內存。
還有一個常用的用法就是:
local foo=foo
這樣做的用處是:保護全局變量不被修改;快速訪問。
2.流程控制
首先要注意一點:除nil和false之外的所有值在判斷中都為真,包括0和空字符。
lua中的流程控制主要包括if,while,repeat,各舉一例。
if,簡單的計算器
print("Input a Formula with two number:") s=io.read() a=string.sub(s,1,1) b=string.sub(s,3,3) op=string.sub(s,2,2)if op == "+" then r = a + b elseif op == "-" then r = a - b elseif op == "*" then r = a*b elseif op == "/" then r = a/b else error("invalid operation") end print(s.."="..r)while,遍歷數組求最大值 a={3213,132,25} local i=1 max=a[1] repeatprint(a[i])if max<a[i] then max=a[i] endi=i+1until a[i]==nil print("max:"..max)
a={1,23,4,45,64,2,132,25} local i=2 max=a[1] while a[i] doprint(a[i])if max<a[i] then max=a[i] endi=i+1 end print("max:"..max)
3.兩種for循環
lua中的阿for循環有兩中,numeric for 和generic for
numeric for的基本形式是:
for var=exp1,exp2,exp3 do<something> end exp1是起點,exp2是終點,exp3是步長,可以不寫,默認的話為1。要注意兩點:1)三個表達式都只計算一次;2)循環控制變量是局部變量,循環結束之后自動銷毀;3)不要試圖在循環中改變循環控制變量,結果是不可預測的;4)跳出for循環用break。
generic for是通過迭代器的方式遍歷所有元素,例如打印數組:
days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"} for k,v in pairs(days) do print(k..":"..v) end
下面是一個插入排序的例子:
a={2,321,23123,32,11} --for i=1,5 do -- a[i]=io.read() --end for i=1,5 dok=ifor j=i+1,5 doif a[k]>a[j] thenk=jendendtmp=a[i]a[i]=a[k]a[k]=tmp end print("After Sort:"); for i=1,#a doprint(a[i]) end
break語句用來退出當前循環(for、repeat、while)。在循環外部不可以使用。
return用來從函數返回結果,當一個函數自然結束時,結尾會有一個默認的return。
Lua語法要求break和return只能出現在block的結尾一句(也就是說:作為chunk的最后一句,或者在end之前,或者else前,或者until前)
總結
以上是生活随笔為你收集整理的每日一Lua(2)-语句的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机初级软件测试认证,[IT认证]手机软
- 下一篇: 手写体数字图像识别图像_手写识别调整笔画