å 嫿éè¦æ¦å¿µã彿°ãæ¹æ³çç Lua å¤å¿åã åå¦è ç宿´å¿«éåèã
macos ä½¿ç¨ homebrew ä¸è½½
$ brew install lua
# æ¥ç lua æ¯å¦å®è£
æå
$ lua -v
#!/usr/bin/env lua
print("Hello World!")
$ lua ./hello.lua
# æè
ä¹å¯ä»¥å bash èæ¬ä¸æ ·
$ chmod +x hello.lua
./hello.lua
-- 以两个åå·å¼å§
å¤è¡æ³¨é以 --[[ å¼å¤´, 以 ]] ç»å°¾
--[[
]]
ä½¿ç¨ type() 彿°å¯ä»¥å¤æåéæè
å¼çç±»å
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 href="https://www.twle.cn/">
ç®åç¼ç¨
</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 ä¸çåéå ¨æ¯å ¨å±åéï¼é£ææ¯è¯å¥åææ¯å½æ°éï¼é¤éç¨ 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
-- ç»å¤ä¸ªåéèµå¼
-- æ
åµ1ï¼a æªå®ä¹è¿
a, b = 10, 2*a -- æ¥éï¼a æ¯ nil
-- æ
åµ2ï¼a å·²å®ä¹ï¼æ¯å¦ a=5ï¼
a = 5
a, b = 10, 2*a -- å³ä¾§ç a=5ï¼ç»æ a=10, b=10ï¼ä¸ä¼æ¥éï¼
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
妿åé个æ°å¤§äºå¼ç个æ°ï¼æåé个æ°è¡¥è¶³ nil
a, b, c = 1, 3
print(a,b,c) --> 1 3 nil
妿åé个æ°å°äºå¼ç个æ°ï¼å¤ä½çå¼ä¼è¢«å¿½ç¥
a = 1
local a, b = a, a + 1, a + 2
print(a, b) --> 1 2
| :- | :- |
|---|---|
+ | å æ³ |
- | åæ³ |
* | 乿³ |
/ | 餿³ |
% | åä½ï¼æ±åºé¤æ³ç使° |
^ | ä¹å¹ï¼è®¡ç®æ¬¡æ¹ |
- | è´å·ï¼åè´å¼ |
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 function isValidNumber(num)
if type(num) ~= "number" then
goto invalidNumber -- æ æ¡ä»¶å°è·³è½¬å°ä»£ç ä¸çæ ç¾ `::invalidNumber::`
end
print("Valid number:", num)
return true
::invalidNumber::
print("Invalid number:", num)
return false
end
isValidNumber(123) -- è¾åº: Valid number: 123
isValidNumber("abc") -- è¾åº: Invalid number: abc
| ç¬¦å· | å«ä¹ |
|---|---|
== | çäº |
~= | ä¸çäº |
> | å¤§äº |
< | å°äº |
>= | 大äºçäº |
<= | å°äºçäº |
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 循ç¯çæ¡ä»¶è¯å¥å¨å½å循ç¯ç»æå夿
local num = 11
repeat
print("num çå¼ä¸º: ", num)
num = num + 1
if (num > 15) then
break
end
until (num > 20)
ååé䏿 ·ï¼å¦æå ä¸ local é£ä¹å°±æ¯å±é¨å½æ°
local function main()
print("è¿æ¯ä¸ä¸ªå±é¨å½æ°")
end
ä½ ä¹å¯ä»¥å°å½æ°èµå¼ç»ä¸ä¸ªåé
local main = function()
print("è¿æ¯ä¸ä¸ªå±é¨å½æ°")
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
-- æå®æ¿æ¢çå符串个æ°, æåä¸ä¸ªåæ°å¯éï¼é»è®¤æ¯å
¨é¨æ¿æ¢
string.gsub("aaaa", "a", "b", 3) -- bbba 3
string.gsub("Today is 29/01/2019", "%d%d/%d%d/%d%d%d%d", "a good day.")
-- Today is a good day.
-- æ¥æ¾ç¬¬ä¸ä¸ªå¹é
çå符串ï¼ç¬¬ä¸ä¸ªåæ°å¯ä»¥æä¾å¼å§æ¥æ¾çä½ç½®ï¼é»è®¤ä» 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
-- å°å符转åä¸ºæ´æ°å¼ã int ç¨æ¥æå®æä¸ªå符ï¼é»è®¤ç¬¬ä¸ä¸ªå符
string.byte("ABCD",4) -- 68
-- 计ç®å符串é¿åº¦
string.len("abc") -- 3
-- è¿åå符串ç n 个æ·è´
string.rep("fw", n) -- fwfw
-- åªåå符串ï¼ç¬¬ä¸ä¸ªåæ°å¯éï¼é»è®¤æ¯å符串é¿åº¦
string.sub("referference", 5, 6) -- rf
| :- | :- |
|---|---|
%a | ä¸ä»»ä½åæ¯é 对 |
%c | ä¸ä»»ä½æ§å¶ç¬¦é 对(ä¾å¦\n) |
%d | ä¸ä»»ä½æ°åé 对 |
%l | ä¸ä»»ä½å°å忝é 对 |
%p | ä¸ä»»ä½æ ç¹(punctuation)é 对 |
%s | ä¸ç©ºç½å符é 对 |
%u | ä¸ä»»ä½å¤§å忝é 对 |
%w | ä¸ä»»ä½åæ¯/æ°åé 对 |
%x | ä¸ä»»ä½åå è¿å¶æ°é 对 |
%z | ä¸ä»»ä½ä»£è¡¨0çå符é 对 |
第ä¸ä¸ªåæ°å¯éï¼é»è®¤ä» 1 å¼å§ãå¦ææ²¡ææè·ç»è¿åæ´ä¸ªå符串ï¼å¹é 失败è¿å nil
string.match(
"I have 2 questions for you.",
"(%d+) (%a+) "
) -- 2 questions
è¿åä¸ä¸ªè¿ä»£å¨å½æ°ï¼æ¯æ¬¡è°ç¨è¿ä»£å¨å½æ°ï¼å¦æåæ° pattern æè¿°çåç¬¦ä¸²æ²¡ææ¾å°ï¼è¿ä»£å½æ°è¿ånil
for world in string.gmatch("I have 2 questions for you.", "%a+") do
print(world)
end
-- I
-- have
-- questions
-- for
-- you
-- ä¸ä¸ªæ¯ä»»ä½æ°åé½å¤§çæµ®ç¹æ°
math.huge
-- æå°å¼çæ´æ°
math.mininteger
local a = math.abs(-1) -- 1
-- è¿åä¸å°äºè¯¥æ°å°æå°æ´æ°
local b = math.ceil(1.2) -- 2
-- è¿åä¸å¤§äºè¯¥æ°å°æå¤§æ´æ°
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
-- è¿ååæ°çå¹³æ¹æ ¹
local r = math.sqrt(9) -- 3
-- è¿åæ°åçç±»åï¼
local l = math.type(1.2) -- float
local m = math.type(3) -- integer
local n = math.type("") -- nil
-- è¿å以æå®åºåºå¯¹æ°
local e = math.log(4, 2) -- 2
-- è¿å以 e 为åºçèªç¶å¯¹æ°
local f = math.exp(2) -- 7.3890560989307
-- è¿å [0,1) åºé´å
ä¸è´åå¸çæµ®ç¹ä¼ªéæºæ°
math.random()
-- è¿å [1, n] åºé´å
ä¸è´åå¸çæ´æ°ä¼ªéæºæ°
math.random(10)
-- è¿å [n, m] åºé´å
ä¸è´åå¸çæ´æ°ä¼ªéæºæ°
math.random(10, 100)
-- æ ç¬¦å·æ´æ°æ¯è¾ï¼åæ°ä¸ å°äº åæ°äº åè¿å trueï¼å¦åè¿å false
local o = math.ult(1, 10)
-- 妿忰å¯ä»¥è½¬æ¢ä¸ºä¸ä¸ªæ´æ°ï¼åè¿åè¯¥æ´æ°ï¼å¦åè¿å nil
local p = math.tointeger("3") -- 3
local q = math.tointeger(0.32) -- nil
-- è¿åæ´æ°åå°æ°é¨å
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.asin(1.0) -- 1.5707963267949
-- åä½å¼¦æ¹æ³
math.acos(1.0) -- 0.0
-- 忣忹æ³
math.atan(1.0) -- 0.78539816339745
-- è§åº¦è½¬æ¢ä¸ºå¼§åº¦
math.rad(90) -- 1.5707963267949
-- 弧度转æ¢ä¸ºè§åº¦
math.deg(math.pi) -- 180.0
åå§åä¸ä¸ªç©ºæ°ç»
local array = {}
é»è®¤çæ°ç»ç´¢å¼ä» 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) -- 0
-- 妿æ³è¦å é¤ä¸ä¸ª 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
-- ç¨äºåæå®é»ä¹æå
¥å
ç´ ãé»è®¤æ°ç»æ«å°¾
-- 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 彿°å¯¼å
¥æåï¼å¤±è´¥åè¿åä¸ä¸ª false ç¶æ
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