列印 print("hello world") 註釋 單行註釋 多行註釋 -- 這是單行註釋 --[[ 這是多行註釋 ]] 賦值 s="Hello World" -- 多重賦值 a,b="String a","String b" -- 交換值,類似python a,b="String a","Str ...
列印
print("hello world")
註釋
- 單行註釋
- 多行註釋
-- 這是單行註釋
--[[
這是多行註釋
]]
賦值
s="Hello World"
-- 多重賦值
a,b="String a","String b"
-- 交換值,類似python
a,b="String a","String b"
a,b=b,a
數據類型
Lua有8種基本類型,如下表
類型 | 說明 |
---|---|
nil | 空值,只包含一個nil |
boolean | 布爾類型 |
number | 數值類型 |
string | 字元串,用單引號或雙引號表示 |
table | Lua中的表,其實是一個關聯數組,數組的索引可以是數字、字元串或表類型 |
function | 函數,由C或Lua編寫的函數 |
userdata | 表示存儲在變數中的c數據結構 |
thread | 線程類型,表示執行的獨立線路,用於執行協同程式 |
print(type("Hello world")) --> string
print(type(10.4*3)) --> number
print(type(print)) --> function
print(type(type)) --> function
print(type(true)) --> boolean
print(type(nil)) --> nil
print(type({})) --> table
print(type(io.stdin)) --> userdata
nil(空)
nil表示一種沒有任何有效值
print(type(a))
給全局變數和table中某一變數賦值為nil,等同於刪除掉。
boolean(布爾)
- boolean類型只有兩個可選值,
true
(真)和false
(假)。 - 在Lua中,
false
和nil
是假,其他的都為真。
number(數字)
Lua預設只有一種number類型,類似C語言中的double(雙精度)
string(字元串)
字元串由一對雙引號或單引號表示。
-- 字元串有以下四種表示方式
s='string'
s="String"
s=[[String]]
s=[==[String]==]
字元串連接採用..
操作符
print("a".."b")
-- ab
使用#
放在字元串前面來計算其長度,如下:
s="Hello world"
print(#s)
--11
table(表)
-- 創建一個空的表
local tb={}
-- 初始化表
local tb1={"a","b","c"}
- 不同於其他語言,Lua的索引從1開始
- table不會固定大小,新增數據table長度自動增加,沒初始化的table都是nil
function(函數)
在 Lua 中,函數是被看作是"第一類值(First-Class Value)",函數可以存在變數里:
function factorial1(n)
if n == 0 then
return 1
else
return n * factorial1(n - 1)
end
end
print(factorial1(5))
factorial2 = factorial1
print(factorial2(5))
function 可以以匿名函數(anonymous function)的方式通過參數傳遞:
function anonymous(tab, fun)
for k, v in pairs(tab) do
print(fun(k, v))
end
end
tab = { key1 = "val1", key2 = "val2" }
anonymous(tab, function(key, val)
return key .. " = " .. val
end)
thread(線程)
在 Lua 里,最主要的線程是協同程式(coroutine)。它跟線程(thread)差不多,
擁有自己獨立的棧、局部變數和指令指針,可以跟其他協同程式共用全局變數和其他大部分東西。
線程跟協程的區別:線程可以同時多個運行,而協程任意時刻只能運行一個,
並且處於運行狀態的協程只有被掛起(suspend)時才會暫停。
userdata(自定義類型)
userdata 是一種用戶自定義數據,用於表示一種由應用程式或 C/C++ 語言庫所創建的類型,
可以將任意 C/C++ 的任意數據類型的數據(通常是 struct 和 指針)存儲到 Lua 變數中調用。
變數
Lua 變數有三種類型:
- 全局變數預設情況下,Lua中所有的變數都是全局變數
- 局部變數使用local顯式聲明在函數內的變數,以及函數的參數,都是局部變數。在函數外即使用local去聲明,它的作用域也是當前的整個文件,這相當於一個全局變數。
- 表中的域
註意,變數的預設值均為nil。Lua語言不區分未初始化變數和被賦值為nil的變數,因此全局變數無須聲明即可使用。「在Lua中,應儘可能使用局部變數」,這有兩個好處:
- 避免命名衝突
- 訪問局部變數的速度比全局變數更快
a = 5 -- 全局變數
local b = 5 -- 局部變數
function joke()
c = 5 -- 全局變數
local d = 6 -- 局部變數
end
a, b, c = 0, 2, 7 -- Lua支持多變數賦值
本文由【產品經理不是經理】gzh同步發佈,歡迎關註