1. 程式人生 > >Unity3D之熱更新

Unity3D之熱更新

一、安裝環境

二、Lua學習資料

三、Lua基本語法

1、註釋

單行註釋:--

多行註釋:

--[[

註釋內容

--]]

2、變數命名

Lua 表示符用於定義一個變數,函式獲取其他使用者定義的項。標示符以一個字母 A 到 Z 或 a 到 z 或下劃線 _ 開頭後加上0個或多個字母,下劃線,數字(0到9)。

最好不要使用下劃線加大寫字母的標示符,因為Lua的保留字也是這樣的。

Lua 不允許使用特殊字元如 @, $, 和 % 來定義標示符。 Lua 是一個區分大小寫的程式語言。因此在 Lua 中 Runoob 與 runoob 是兩個不同的標示符。


3、關鍵字

以下列出了 Lua 的保留關鍵字。保留關鍵字不能作為常量或變數或其他使用者自定義標示符:

and break do else
elseif end false for
function if in local
nil not or repeat
return then true until
while

一般約定,以下劃線開頭連線一串大寫字母的名字(比如 _VERSION)被保留用於 Lua 內部全域性變數。

4、全域性變數

在預設情況下,變數總是認為是全域性的。

全域性變數不需要宣告,給一個變數賦值後即建立了這個全域性變數,訪問一個沒有初始化的全域性變數也不會出錯,只不過得到的結果是:nil。

如果你想刪除一個全域性變數,只需要將變數賦值為nil。
這樣變數b就好像從沒被使用過一樣。換句話說, 當且僅當一個變數不等於nil時,這個變數即存在。

5、資料型別

Lua是動態型別語言,變數不要型別定義,只需要為變數賦值。 值可以儲存在變數中,作為引數傳遞或結果返回。

Lua中有8個基本型別分別為:nil、boolean、number、string、userdata、function、thread和table。

資料型別 描述
nil 這個最簡單,只有值nil屬於該類,表示一個無效值(在條件表示式中相當於false)。
boolean 包含兩個值:false和true。
number 表示雙精度型別的實浮點數
string 字串由一對雙引號或單引號來表示
function 由 C 或 Lua 編寫的函式
userdata 表示任意儲存在變數中的C資料結構
thread 表示執行的獨立線路,用於執行協同程式
table Lua 中的表(table)其實是一個"關聯陣列"(associative arrays),陣列的索引可以是數字或者是字串。在 Lua 裡,table 的建立是通過"構造表示式"來完成,最簡單構造表示式是{},用來建立一個空表。

我們可以使用type函式測試給定變數或者值的型別:

print(type("Hello world"))-->stringprint(type(10.4*3))--> number
print(type(print))-->functionprint(type(type))-->functionprint(type(true))-->booleanprint(type(nil))-->nilprint(type(type(X)))-->string

nil(空)

nil 型別表示一種沒有任何有效值,它只有一個值 -- nil,例如列印一個沒有賦值的變數,便會輸出一個 nil 值:

>print(type(a))nil>

對於全域性變數和 table,nil 還有一個"刪除"作用,給全域性變數或者 table 表裡的變數賦一個 nil 值,等同於把它們刪掉,執行下面程式碼就知:

tab1 ={ key1 ="val1", key2 ="val2","val3"}for k, v in pairs(tab1)doprint(k .." - ".. v)end
 
tab1.key1 =nilfor k, v in pairs(tab1)doprint(k .." - ".. v)end

boolean(布林)

boolean 型別只有兩個可選值:true(真) 和 false(假),Lua 把 false 和 nil 看作是"假",其他的都為"真":

print(type(true))print(type(false))print(type(nil))iffalseornilthenprint("至少有一個是 true")elseprint("false 和 nil 都為 false!")end

以上程式碼執行結果如下:

$ lua test.lua 
booleanbooleannilfalsenil都為false!

number(數字)

Lua 預設只有一種 number 型別 -- double(雙精度)型別(預設型別可以修改 luaconf.h 裡的定義),以下幾種寫法都被看作是 number 型別:

print(type(2))print(type(2.2))print(type(0.2))print(type(2e+1))print(type(0.2e-1))print(type(7.8263692594256e-06))

6、變數

變數在使用前,必須在程式碼中進行宣告,即建立該變數。

編譯程式執行程式碼之前編譯器需要知道如何給語句變數開闢儲存區,用於儲存變數的值。

Lua 變數有三種類型:全域性變數、區域性變數、表中的域。

Lua 中的變數全是全域性變數,那怕是語句塊或是函式裡,除非用 local 顯式宣告為區域性變數。

區域性變數的作用域為從宣告位置開始到所在語句塊結束。

變數的預設值均為 nil。

7、語法

 賦值語句

賦值是改變一個變數的值和改變表域的最基本的方法。

Lua可以對多個變數同時賦值,變數列表和值列表的各個元素用逗號分開,賦值語句右邊的值會依次賦給左邊的變數。

a, b =10,2*x       <-->       a=10; b=2*x

遇到賦值語句Lua會先計算右邊所有的值然後再執行賦值操作,所以我們可以這樣進行交換變數的值:

x, y = y, x                     -- swap 'x'for'y'
a[i], a[j]= a[j], a[i]-- swap 'a[i]'for'a[j]'

當變數個數和值的個數不一致時,Lua會一直以變數個數為基礎採取以下策略:

a.變數個數>值的個數按變數個數補足nil
b.變數個數<值的個數多餘的值會被忽略

注意:如果要對多個變數賦值必須依次對每個變數賦值。

a, b, c =0,0,0print(a,b,c)-->000

多值賦值經常用來交換變數,或將函式呼叫返回給變數:

a, b = f()

f()返回兩個值,第一個賦給a,第二個賦給b。

應該儘可能的使用區域性變數,有兩個好處:

  • 1. 避免命名衝突。
  • 2. 訪問區域性變數的速度比全域性變數更快。

Lua迴圈

Lua 語言提供了以下幾種迴圈處理方式:

迴圈型別 描述
在條件為 true 時,讓程式重複地執行某些語句。執行語句前會先檢查條件是否為 true。
for 迴圈 重複執行指定語句,重複次數可在 for 語句中控制。
迴圈巢狀 可以在迴圈內巢狀一個或多個迴圈語句(while、for、do..while)