1. 程式人生 > 實用技巧 >Lua:基本語法以及資料型別

Lua:基本語法以及資料型別

一、Print方法和註釋

  • print():向控制檯列印方法
  • -- 單行註釋
  • --[[
    多行註釋
    --]]

Tips:通過將 --[[ 修改成 ---[[ 快速將多行註釋取消。

二、識別符號命名規則及常用關鍵字

識別符號命名規則:

  1. 不能以數字開頭
  2. 不能是關鍵字
  3. 命名區分大小寫
  4. 不建議“_大寫字母”命名

Lua中常用關鍵字:and break do else elseif end false for function goto if in local nil not or repeat return then true until while

三、變數

在預設情況下,變數總是認為是全域性的。
Lua變數不需要宣告,沒有初始化的全域性變數為nil。
通過給變數賦值為nil,刪除變數。

四、資料型別

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 的建立是通過"構造表示式"來完成,最簡單構造表示式是{},用來建立一個空表。

五、nil(空)

nil 可以表示空值,還有一個"刪除"作用
nil 作比較時應該加上雙引號 ",如:

type(X)=="nil"

六、boolean(布林)

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

七、number(數字)

Lua 預設只有一種 number 型別 -- double(雙精度)型別(預設型別可以修改 luaconf.h 裡的定義)

八、string (字串)

1.字串由一對雙引號或單引號來表示。也可以用2個方括號 "[[]]" 來表示"多行"字串。

如:

html = [[
<html>
<head></head>
<body>
<a href="http://www.runoob.com/">菜鳥教程</a>
</body>
</html>
]]
print(html)

2.字串連線使用".."

3.在對一個數字字串上進行算術操作時,Lua 會嘗試將這個數字字串轉成一個數字。
如:

print("2" + 6)
print("2" + "6")

都會輸出8.0

print("error" + 1)

報錯
4.使用 # 來計算字串的長度,放在字串前面。
如:

print(#"Hahaha")

輸出6

九、table

Lua 中的表(table)其實是一個"關聯陣列"(associative arrays),陣列的索引可以是數字或者是字串。可以理解為C#中的字典。table 的建立是通過"構造表示式"來完成,最簡單構造表示式是{}。
1、構造一個空表
如:

tbl1 = {}

2、初始化一個表

如:

tab1 = {key1 = 100,key2= "val2"}

3、print(表)輸出表的地址

4、訪問表中元素

第一種:.

如:

print(tab1.key1)

第二種:索引[]

如:

print(tab1["key1"])

5、使用預設索引構建表,初始索引為1。注意:初始索引為1,與其他語言不一樣,不為0!!!此時不能用.來訪問元素。

tbl = {"apple", "pear", "orange", "grape"}
print(tbl[2])

輸出為pear

6、遍歷table

for key, val in pairs(tbl) do
print(key..":"..val)
end

7、table不會固定長度大小

8、新增、刪除table元素

刪除如:

tab1["key1"] = nil
tab1.key1 = nil

新增如:

tab1["key5"] = "hahaha"
tab1.key5 = "hahaha"

注意:刪除使用預設索引構建的表中的元素,不會改變其他元素的索引值。

十、function(函式)

1、在 Lua 中,函式是被看作是"第一類值(First-Class Value)",函式可以像變數一樣賦值。

如:

function fact(n)
  if n==1 then
    return n;
  else
    return n*fact(n-1);
  end
end

print(fact(3))
fact2 = fact

print(fact2(3))

2、函式可以像C#中的委託一樣使用。

如:

function testFun(tab,fun)
  for k,v in pairs(tab) do
  fun(k,v)
  end
end

tab = {key1 = "Val1",key2 = "Val2"}

function f1(k,v)
  print(k..":"..v)
end

testFun(tab,f1)

3、也可以像C#匿名方法和lambda表示式那樣。

testFun(tab,function(k,v)
  print(k.."-"..v)
  end
)

本文參考:https://www.runoob.com/lua/lua-data-types.html