每日一Lua(2)-语句
1.局部变量 局部变量的声明关键字:local. 局部变量的作用域是声明块,指的是函数体,或者是一个chunk。 例子: local a,b=1,10 if a<b then print(a) local a print(a) end print(a,b) 可以用do..end语言来控制局部变量的作用域,例如求解二元一次方程二元一次: a,b,c=1,4,1 do local a2=2*a local delta=(b^2-4*a*c)^(1/2) x1=(-b+delta)/a2 x2=(-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] repeat print(a[i]) if max<a[i] then max=a[i] end i=i+1 until a[i]==nil print("max:"..max) a={1,23,45,64,25} local i=2 max=a[1] while a[i] do print(a[i]) if max<a[i] then max=a[i] end i=i+1 end print("max:"..max) 3.两种for循环 lua中的阿for循环有两中,numeric for 和generic for numeric for的基本形式是: for var=exp1,exp2,exp3 do <something> endexp1是起点,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 do k=i for j=i+1,5 do if a[k]>a[j] then k=j end end tmp=a[i] a[i]=a[k] a[k]=tmp end print("After Sort:"); for i=1,#a do print(a[i]) end break语句用来退出当前循环(for、repeat、while)。在循环外部不可以使用。 return用来从函数返回结果,当一个函数自然结束时,结尾会有一个默认的return。 Lua语法要求break和return只能出现在block的结尾一句(也就是说:作为chunk的最后一句,或者在end之前,或者else前,或者until前) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |