Lua 學習筆記(一)—— 基本語法

1 簡介

由 clean C 實現。須要被宿主程序調用,能夠注入 C 函數。數組

2 語法約定

Lua 的語法基於 BNF 的語法規則。數據結構

Lua 對大小寫敏感。函數

2.1 保留關鍵字

C 語言中沒有的關鍵字有:code

and elseif function
in nil local not or
repeat then untilorm

規範:全局變量如下劃線開頭。協程

2.2 操做符

C 語言中沒有的操做符:對象

^ 
~= 
//  -- 向下取整

Lua 中沒有的操做符:繼承

+=
-=

2.3 字符串定義

採用轉義符:經過轉義符表示那些有歧義的字符

字符表示索引

a           -- 表明字符 a
\97         -- 表明字符 a
\049        -- 表明數字字符 1

其餘轉義符表示作用域

\\n         -- 表明字符串 \n
\n          -- 表明換行

注意數字字符必須是三位。其餘字符則不能超過三位。

採用長括號:長括號內的全部內容都做爲普通字符處理。

[[]]        -- 0級長括號
[==[]==]    -- 2級長括號

3 值與類型

Lua 是動態語言,變量沒有類型,值纔有。值自身攜帶類型信息。

Lua 有八種基本數據類型:nil, boolean, number, string, function, userdata, thread, table

nilfalse 致使條件爲假,其餘均爲真。

userdata 類型變量用於保存 C 數據。 Lua 只能對該類數據進行使用,而不能進行建立或修改,保證宿主程序徹底掌握數據。

thread 用於實現協程(coroutine)。

table 用於實現關聯數組。table 容許任何類型的數據作索引,也容許任何類型作 table 域中的值(前述
任何類型 不包含 nil)。table 是 Lua 中惟一的數據結構。
因爲函數也是一種值,因此 table 中能夠存放函數。

function, userdata, thread, table 這些類型的值都是對象。這些類型的變量都只是保存變量的引用,而且在進行賦值,參數傳遞,函數返回等操做時不會進行任何性質的拷貝。

庫函數 type() 返回變量的類型描述信息。

3.1 強制轉換

Lua 提供數字字符串間的自動轉換。
可使用 format 函數控制數字向字符串的轉換。

4 變量

變量有三種類型:全局變量、局部變量、表中的域

函數外的變量默認爲全局變量,除非用 local 顯示聲明。函數內變量與函數的參數默認爲局部變量。

局部變量的做用域爲從聲明位置開始到所在語句塊結束(或者是直到下一個同名局部變量的聲明)。

變量的默認值均爲 nil。


a = 5 -- 全局變量 local b = 5 -- 局部變量 function joke() c = 5 -- 局部變量 local d = 6 -- 局部變量 end print(c,d) --> nil nil do local a = 6 -- 局部變量 b = 6 -- 全局變量 print(a,b); --> 6 6 end print(a,b) --> 5 6

方便標記,--> 表明前面表達式的結果。

4.1 索引

對 table 的索引使用方括號 []。Lua使用語法糖提供 . 操做。

t[i]
t.i                 -- 當索引爲字符串類型時的一種簡化寫法
gettable_event(t,i) -- 採用索引訪問本質上是一個相似這樣的函數調用

4.2 環境表

全部全局變量放在一個環境表裏,該表的變量名爲 _env 。對某個全局變量 a 的訪問即 _env.a_env_ 只是爲了方便說明)。

每一個函數做爲變量持有一個環境表的引用,裏面包含該函數可調用的全部變量。
子函數會從父函數繼承環境表。
能夠經過函數 getfenv / setfenv 來讀寫環境表。

相關文章
相關標籤/搜索