包含最重要概念、函數(shù)、方法等的 Lua 備忘單。 初學者的完整快速參考。
#!/usr/bin/env lua
print("Hello World!")
$ lua ./hello.lua
# 或者也可以像 bash 腳本一樣
$ chmod +x hello.lua
./hello.lua
-- 以兩個減號開始
多行注釋以 --[[ 開頭, 以 ]] 結尾
--[[
]]
使用 type() 函數(shù)可以判斷變量或者值的類型
print(type(true)) -- boolean
print(type(nil)) -- nil
Lua 默認只有一種 number 類型 double (雙精度) 類型
print(10)
print(0.3)
print(2e + 10)
-- 使用 ''
local str1 = 'str1'
-- 使用 ""
local str2 = "str2"
[[]]使用 [[]] 跨行表示多個字符串
local html = [[
<html>
<head></head>
<body>
<a >簡單編程</a>
</body>
</html>
]]
print(html)
..)print("a" .. 'b')
-- ab
print(157 .. 428)
-- 157428
#)print(#"string") -- 6
local table = {}
默認的初始索引會從 1 開始
local array = { "apple", "pear", "orange", "grape" }
print(array[1]) -- apple
for k, v in pairs(array) do
print(k .. " : " .. v)
end
-- 1 : apple
-- 2 : pear
-- 3 : orange
-- 4 : grape
local array = {}
array.one = "apple"
array["two"] = "peach"
print(array.one) -- apple
print(array.two) -- peach
變量的默認值均是 nil
#!/usr/bin/env lua
print(b) -- nil
Lua 中的變量全是全局變量,那怕是語句塊或是函數(shù)里,除非用 local 顯式聲明為局部變量
#!/usr/bin/env lua
function main()
local b = 12
a = 23
end
main()
print(a) -- 23
print(b) -- nil
a = "hello " .. "world" -- 改變 變量
t.n = t.n + 1 -- 改變 table
-- 給多個變量賦值
a, b = 10, 2*a --> a=10; b=20
local x, y = 1, 3
x, y = y, x
print(x, y) -- 3, 1
local tab = {}
tab.one = 2
tab.two = 1
tab["one"], tab["two"] = tab.two, tab.one
print(tab.one, tab.two) -- 1 2
如果變量個數(shù)大于值的個數(shù),按變量個數(shù)補足 nil
a, b, c = 1, 3
print(a,b,c) --> 1 3 nil
如果變量個數(shù)小于值的個數(shù),多余的值會被忽略
a = 1
local a, b = a, a + 1, a + 2
print(a, b) --> 1 2
| :- | :- |
|---|---|
| + | 加法 |
| - | 減法 |
| * | 乘法 |
| / | 除法 |
| % | 取余,求出除法的余數(shù) |
| ^ | 乘冪,計算次方 |
| - | 負號,取負值 |
local a, b = 4, 3
print(a + b) -- 7
print(a - b) -- 1
print(a / b) -- 1.3333333333333
print(a * b) -- 12
print(a % b) -- 1
print(a ^ b) -- 64.0
在算術運算中,string 類型會嘗試自動轉換為 number 時
local a, b, c = "str", "1", "2"
-- print(a + b) -- error
print(b + c) -- 3
number 類型使用 .. 會自動轉換為 string
local a, b = 1, 2
print(type(a .. b))
其它方式的轉換
print(type(tostring(12))) -- string
print(type(tonumber("12"))) -- number
| 符號 | 含義 |
|---|---|
== | 等于 |
~= | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
local a, b = 4, 3
print(a < b) -- false
print(a <= b) -- false
print(a == b) -- false
print(a ~= b) -- true
print(a > b) -- true
print(a >= b)-- true
| 符號 | 含義 |
|---|---|
and | 邏輯與 |
or | 邏輯或操作符 |
not | 邏輯非操作符 |
local a, b = true, false
print(a and b) -- false
print(a and not b) -- true
print(a or b) -- true
local num = 1
while (num < 5) do
print("num 的值為:", num)
num = num + 1
end
if(0)
then
print("0 為 true")
end
local age = 27;
if (age < 18)
then
print("age 小于 18")
elseif (age < 25)
then
print("age 小于 25")
elseif (age < 30)
then
print("age 小于 30")
else
print("age 大于 30")
end
print("age 的值為 :", age)
Lua 中 0 為 true,但是 Lua 中的 nil 可以當作 false
for i = 10, 1, -1 do
print(i)
end
local f = function(x)
print("in f(x) ")
return x * 2
end
for i = 1, f(5) do
print(i)
end
local num = 11
repeat
print("num 的值為: ", num)
num = num + 1
until (num > 10)
-- num 的值為:11
repeat...until 循環(huán)的條件語句在當前循環(huán)結束后判斷
local num = 11
repeat
print("num 的值為: ", num)
num = num + 1
if (num > 15) then
break
end
until (num > 20)
像變量一樣,如果加上 local 那么就是局部函數(shù)
local function main()
print("這是一個局部函數(shù)")
end
你也可以將函數(shù)賦值給一個變量
local main = function()
print("這是一個局部函數(shù)")
end
local function min(a, b)
if (a < b) then
return a
else
return b
end
end
print(min(1, 2))
local p = function(res)
print("打印自己的風格", res)
end
local function main(a, b, p)
p(a + b)
end
main(1, 2, p)
local function min(a)
local sum = 0
local factorial = 1
for i, v in pairs(a) do
sum = sum + v
factorial = factorial * v
end
return sum, factorial
end
local a, b = min({ 1, 2, 3, 4 })
print(a, b)
...)local function average(...)
local result = 0
local arg = { ... }
for i, v in ipairs(arg) do
result = result + v
end
return result / #arg
end
print("平均值為", average(1, 3, 5, 7, 9, 11))
-- 全部轉換為大寫
string.upper("str") -- STR
-- 全部轉換為小寫
string.lower("STR") -- str
-- 指定替換的字符串個數(shù), 最后一個參數(shù)可選,默認是全部替換
string.gsub("aaaa", "a", "b", 3) -- bbba 3
string.gsub("Today is 29/01/2019", "%d%d/%d%d/%d%d%d%d", "good day.")
-- Today is a good day. 1
-- 查找第一個匹配的字符串,第三個參數(shù)可以提供開始查找的位置,默認從 1 開始
-- 如果未找到,則返回 nil
string.find("referference", "fer") -- 3 5
string.find("Today is 29/01/2021", "%d%d/%d%d/%d%d%d%d") -- 10 19
-- 字符串反轉
string.reverse("fw") -- wf
-- 格式化字符串
string.format("value:%c", 1) -- value:a
-- 轉換字符并拼接
string.char(97,98,99,100) -- abcd
-- 將字符轉化為整數(shù)值。 int 用來指定某個字符,默認第一個字符
string.byte("ABCD",4) -- 68
-- 計算字符串長度
string.len("abc") -- 3
-- 返回字符串的 n 個拷貝
string.rep("fw", n) -- fwfw
-- 剪切字符串,第三個參數(shù)可選,默認是字符串長度
string.sub("referference", 5, 6) -- rf
| :- | :- |
|---|---|
%a | 與任何字母配對 |
%c | 與任何控制符配對(例如\n) |
%d | 與任何數(shù)字配對 |
%l | 與任何小寫字母配對 |
%p | 與任何標點(punctuation)配對 |
%s | 與空白字符配對 |
%u | 與任何大寫字母配對 |
%w | 與任何字母/數(shù)字配對 |
%x | 與任何十六進制數(shù)配對 |
%z | 與任何代表0的字符配對 |
第三個參數(shù)可選,默認從 1 開始。如果沒有捕獲組返回整個字符串,匹配失敗返回 nil
string.match(
"I have 2 questions for you.",
"(%d+) (%a+) "
) -- 2 questions
返回一個迭代器函數(shù),每次調用迭代器函數(shù),如果參數(shù) pattern 描述的字符串沒有找到,迭代函數(shù)返回nil
for world in string.gmatch("I have 2 questions for you.", "%a+") do
print(world)
end
-- I
-- have
-- questions
-- for
-- you
-- 一個比任何數(shù)字都大的浮點數(shù)
math.huge
-- 最小值的整數(shù)
math.mininteger
local a = math.abs(-1) -- 1
-- 返回不小于該數(shù)到最小整數(shù)
local b = math.ceil(1.2) -- 2
-- 返回不大于該數(shù)到最大整數(shù)
local c = math.floor(1.2) -- 1
-- 取余
local d = math.fmod(9.9, 9) -- 0.9
-- 返回最大值
local g = math.max(1, 2, 3) -- 3
-- 返回最小值
local h = math.min(1, 2, 3) -- 1
-- 返回參數(shù)的平方根
local r = math.sqrt(3) -- 9
-- 返回數(shù)字的類型,
local l = math.type(1.2) -- float
local m = math.type(3) -- integer
local n = math.type("") -- nil
-- 返回以指定底底對數(shù)
local e = math.log(4, 2) -- 2
-- 返回以 e 為底的自然對數(shù)
local f = math.exp(2) -- 7.3890560989307
-- 返回 [0,1) 區(qū)間內一致分布的浮點偽隨機數(shù)
math.random()
-- 返回 [1, n] 區(qū)間內一致分布的整數(shù)偽隨機數(shù)
math.random(10)
-- 返回 [n, m] 區(qū)間內一致分布的整數(shù)偽隨機數(shù)
math.random(10, 100)
-- 無符號整數(shù)比較,參數(shù)一 小于 參數(shù)二 則返回 true,否則返回 false
local o = math.ult(1, 10)
-- 如果參數(shù)可以轉換為一個整數(shù),則返回該整數(shù),否則返回 nil
local p = math.tointeger("3") -- 3
local q = math.tointeger(0.32) -- nil
-- 返回整數(shù)和小數(shù)部分
local i, j = math.modf(3.14) -- 3 0.14
-- 圓周率
math.pi -- 3.1415926535898
-- 正弦方法(以下皆是以弧度表示)
math.sin(math.pi / 2) -- 1.0
-- 余弦方法
math.cos(math.pi) -- -1.0
-- 正切方法
math.tan(math.pi / 4) -- 1.0
-- 反正弦方法(以下皆是以弧度表示)
math.acos(1.0) -- 0.0
-- 反余弦方法
math.acos(1.0) -- 1.5707963267949
-- 反正弦方法
math.atan(1.0) -- 0.78539816339745
-- 角度轉換為弧度
math.rad(90) -- 1.5707963267949
-- 弧度轉換為角度
math.deg(math.pi) -- 180.0
初始化一個空數(shù)組
local array = {}
默認的數(shù)組索引從 1 開始
local array = { "a", "b", "c", "d" }
array[5] = "e"
for i = 1, 5 do
print(array[i])
end
local array = {
{ "a", "b", "c" },
{ "d", "e", "f" }
}
for i = 1, #array do
for j = 1, #array[i] do
print(array[i][j])
end
end
local table = {}
table.name = "fw"
table.age = "18"
table["sex"] = "boy"
-- 獲取 table 的長度
print(#table) -- 3
-- 如果想要刪除一個 table,那么可以使用 nil 賦值
table = nil
print(table)
-- 用于連接 table 中指定的元素
-- table.concat(table [, sep [, start [, end]]])
local a = { "apple", "orange", "peach" }
print(table.concat(a, "->", 2, 3)) -- orange->peach
-- 用于向指定聞之插入元素。默認數(shù)組末尾
-- table.insert(table, [pos,] value)
local a = { "apple", "orange", "peach" }
table.insert(a, 1, "pear")
print(a[1]) -- pear
-- table.move(a1,f,e,t[,a2])
-- 表a1,a1下標開始位置f,a1下標結束位置e,t選擇移動到的開始位置(如果沒有a2,默認a1的下標)
local array = { "a", "b", "c" }
for i,v in pairs(table.move(array, 1, 3, 2)) do
print(v)
end -- a a b c
-- table.sort (table [, comp])
-- 排序,默認是升序
local array = { "a", "c", "b" }
local f = function(a, b)
return string.byte(a) - string.byte(b) > 0
end
table.sort(array, f)
for i, v in pairs(array) do
print(v)
end -- c b a
function square(d,n)
if n < d
then
n = n + 1
return n, n*n
end
end
for i,n in square,5,0
do
print(i,n)
end
for i, n in pairs({ 1, 2, 3, 4 }) do
print(i, n)
end
-- a.lua
local mod = {}
mod.cool = "this is a mod"
function mod.test()
print("this is a function")
end
return mod
一般我們可以直接使用 require 導入
-- b.lua
-- local mod = require("a")
-- 使用 pcall 確保 require 函數(shù)導入成功,失敗則返回一個 false 狀態(tài)
local status, mod = pcall(require, "a")
if not status then
return
end
mod.test()
print(mod.cool)
local mod = {}
local function private()
print("private")
end
function mod.public()
private()
end
return mod
感谢您访问我们的网站,您可能还对以下资源感兴趣:
国产成人精品999视频&日本一区二区亚洲人妻精品&久久久精品国产99久久精&99热这里只有成人精品国产&精品国产剧情av一区二区&成人亚洲精品久久久久app&国产精品美女高潮抽搐A片