天天看點

[Lua]Lua語言基礎彙總(3) -- 語句指派

指派的基本含義是修改一個變量或一個table中字段的值,這個和其它語言沒有多少差別,但是對于Lua,有一個特性,它允許“多重指派”,也就是一下子将多個值賦予多個變量,例如以下代碼:

1

2

3

<code>local x1, x2 = 2, 4</code>

<code>print(x1)     --&gt;2</code>

<code>print(x2)     --&gt;4</code>

在多重指派中,Lua先對等号右邊的所有元素求值,然後才執行指派,例如以下用法,可以非常簡便的交換兩個元素的值:

4

<code>x1, x2 = x2, x1</code>

<code>print(x1)     --&gt;4</code>

<code>print(x2)     --&gt;2</code>

Lua總是會将等号右邊值得個數調整到與左邊變量的個數相一緻,規則是:如果值得個數少于變量的個數,那麼多餘的變量會被賦為nil;如果值得個數更多的話,那麼多餘的值會被忽略掉。

局部變量與塊

相對于全局變量,Lua同時也提供了局部變量。通過local語句來建立局部變量:

<code>i = 10     --&gt;全局變量</code>

<code>local i = 10     --&gt;局部變量</code>

在Lua中,局部變量也是有作用範圍的,也就是說,出了局部變量的作用範圍,局部變量就會失去作用,這個和C++等進階語言是一樣的道理。我們在程式設計的過程中,也可以使用do…end來顯示的聲明一個塊,例如以下代碼:

<code>do</code>

<code>     </code><code>local a1 = 10</code>

<code>     </code><code>local a2 = 10</code>

<code>end          --&gt;a1和a2的作用域到此結束</code>

至于使用局部變量和全局變量,關系到程式設計風格和實際需要,這裡不做多說。

控制結構

幾乎所有的語言都有控制結構,同樣,對于Lua的控制結構是非常簡單的。Lua提供了用于條件執行的if,循環的while、repeat和for。所有的控制結構都有一個顯式的終止符:if、for和while以end作為結尾,repeat以until作為結尾。特别注意,在Lua中是不支援switch結構的。

if then else

if語句先測試其條件,然後根據測試結果執行then部分或者else部分,else部分是可選的。如果要編寫嵌套的if,可以使用elseif,下面通過代碼示例來說明if的使用。

5

6

7

8

9

10

11

12

<code>if</code> <code>a &lt; 0 then a = 0 end</code>

<code>if</code> <code>a &lt; b then retuan a </code><code>else</code> <code>return</code> <code>b end</code>

<code>if</code> <code>op == </code><code>"+"</code> <code>then</code>

<code>     </code><code>r = a + b</code>

<code>elseif op == </code><code>"-"</code> <code>then</code>

<code>     </code><code>r = a - b</code>

<code>elseif op == </code><code>"*"</code> <code>then</code>

<code>     </code><code>r = a * b</code>

<code>elseif op == </code><code>"/"</code> <code>then</code>

<code>     </code><code>r = a / b</code>

<code>end</code>

while

Lua中的while與其它語言是一樣的,示例代碼如下:

<code>local a = 10</code>

<code>while</code> <code>a &gt; 0 </code><code>do</code>

<code>     </code><code>a = a - 1</code>

<code>     </code><code>-- Do something </code><code>else</code>

repeat

repeat就好比C++中的do…while結構,循環體至少會執行一次。repeat-until語句重複執行其循環體直到條件為真時結束。

在Lua中有兩種for語句的形式:數字型for和泛型for

數字型for

數字型for的文法如下:

<code>for</code> <code>var = exp1, exp2, exp3 </code><code>do</code>

<code>     </code><code>-- Do something</code>

var從exp1變化到exp2,每次變化都以exp3作為步長進行遞增,并執行一次do…end之間的代碼。第三個表達式exp3是可選的,若不指定的話,Lua會将步長預設為1。例如以下代碼:

<code>for</code> <code>var = 1, 10 </code><code>do</code>

<code>     </code><code>print(var)</code>

<code>for</code> <code>var = 10, 1, -1 </code><code>do</code>

在使用for時,需要注意以下兩點:

1.for的exp1,exp2和exp3,這三個表達式是在循環開始前一次性求值得;并不會每次循環都進行求值;

2.控制變量var會被自動的聲明為for語句的局部變量,并且僅在循環體内可見。

泛型for

泛型for循環通過一個疊代器函數來周遊所有值。在Lua的基礎庫中提供了ipairs,這是一個用于周遊數組的疊代器函數。從外觀上看泛型for比較簡單,但其實它是非常強大的。通過不同的疊代器,幾乎可以周遊所有的東西。标準庫提供了幾種疊代器,包括用于疊代檔案中每行的io.lines、疊代table元素的pairs、疊代數組元素的ipairs和疊代字元串中單詞的string.gmatch等。當然了,我們也可以編寫自己的疊代器,在以後的文章中,我會總結如何編寫疊代器的。

break與return

break和return語句用于跳出目前的塊。這裡的break、return和C++等語言是一樣的。break語句用于結束一個循環,return語句用于從一個函數中傳回結果。

繼續閱讀