每日一Lua(2)-語句

來源:互聯網
上載者:User

1.局部變數

局部變數的聲明關鍵字:local.

局部變數的範圍是聲明塊,指的是函數體,或者是一個chunk。

例子:

local a,b=1,10if a<b thenprint(a)local aprint(a)endprint(a,b)

可以用do..end語言來控制局部變數的範圍,例如求解二元一次方程二元一次:

a,b,c=1,4,1dolocal a2=2*alocal delta=(b^2-4*a*c)^(1/2)x1=(-b+delta)/a2x2=(-b-delta)/a2endprint(x1,x2)

a2和delta都聲明為局部變數,在chunk運行結束之後思動銷毀。

在Lua中應當儘可能地去使用local聲明,因為:

1)可以不影響全域成員的情況下重複使用變數名;

2)使用局部變數會更快一些;

3)當局部變數的chunk代碼執行完畢,局部變數就會自動釋放被佔用的記憶體。

還有一個常用的用法就是:

local foo=foo

這樣做的用處是:保護全域變數不被修改;快速存取。

2.流程式控制制

首先要注意一點:除nil和false之外的所有值在判斷中都為真,包括0和Null 字元。

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 == "+" thenr = a + belseif op == "-" thenr = a - belseif op == "*" thenr = a*belseif op == "/" thenr = a/belseerror("invalid operation")endprint(s.."="..r)

while,遍曆數組求最大值

a={3213,132,25}local i=1max=a[1]repeatprint(a[i])if max<a[i] then max=a[i] endi=i+1until a[i]==nilprint("max:"..max)

repeat,改寫上面的吧(感覺就是c中的do...while,先執行再判斷)

a={1,23,4,45,64,2,132,25}local i=2max=a[1]while a[i] doprint(a[i])if max<a[i] then max=a[i] endi=i+1endprint("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()--endfor i=1,5 dok=ifor j=i+1,5 doif a[k]>a[j] thenk=jendendtmp=a[i]a[i]=a[k]a[k]=tmpendprint("After Sort:");for i=1,#a doprint(a[i])end

4.break和return

break語句用來退出當前迴圈(for、repeat、while)。在迴圈外部不可以使用。
return用來從函數返回結果,當一個函數自然結束時,結尾會有一個預設的return。
Lua文法要求break和return只能出現在block的結尾一句(也就是說:作為chunk的最後一句,或者在end之前,或者else前,或者until前)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.