local _M = {} -- table
_M.config = {
a = 1
}
_M.init = function ()
-- do something
end
_M.run = function ()
-- run something
end
print(_M.config) -- table: 0x1665cf0
print(_M.init) -- function: 0xc367e0
print(_M.run) --function: 0xc3d1e0
local a = { name = "Kim" }
local b = a
print(b.name) -- Kim
a.name = "John"
print(b.name) -- John
-- 注意,a = nil 即意味着将 a 变量删除
-- 但是不意味着 { name = "Kim" } 的销毁
-- 因为仍然有 b 变量指向该 table
a = nil
print(b.name) -- John
-- if
local is_ready = true
if is_ready then
print("ready")
end
-- if-else
if is_ready then
print("ready")
else
print("not ready")
end
-- if-elseif-else
local x = 3
if x > 100 then
print("x > 100")
elseif x > 10 then
print("x > 10 and x <= 100")
else
print("x <= 10")
end
-- 打印结果
-- x <= 10
-- while
while x >= 0 do
print(x)
x = x - 1
end
-- 打印结果
-- 3
-- 2
-- 1
-- 0
-- for
-- for 循环的格式
-- for var = begin, finish, step do
-- end
for i = 3, 1, -1 do
print(i)
end
-- 打印结果
-- 3
-- 2
-- 1
local students = { "Lisa", "Mike", "Alan", "Kim" }
-- 使用 #students 计算 table 长度
for i = 1, #students do
if students[i] == "Alan" then
print("Find Alan")
break -- 找到 Alan 后跳出 for 循环
else
print(students[i] .. " is not Alan") -- 使用 .. 连接字符串
end
end
-- 打印结果
-- Lisa is not Alan
-- Mike is not Alan
-- Find Alan
local students = { "Lisa", "Mike", "Alan", "Kim" }
-- ipairs
for i, v in ipairs(students) do
print("index:", i, " name:", v)
end
-- 打印结果
-- index: 1 name: Lisa
-- index: 2 name: Mike
-- index: 3 name: Alan
-- index: 4 name: Kim
-- pairs
for k, v in pairs(students) do
print("index:", k, " name:", v)
end
-- 打印结果
-- index: 1 name: Lisa
-- index: 2 name: Mike
-- index: 3 name: Alan
-- index: 4 name: Kim
-- pairs
local user = { name = "Alan", gender = "male", age = 15 }
for k, v in pairs(user) do
print("key:", k, " value:", v)
end
-- 打印结果
-- key: age value: 15
-- key: gender value: male
-- key: name value: Alan
-- table 中存在 nil 的异常情况
local students = { "Lisa", nil, "Alan", "Kim" }
for i, v in ipairs(students) do
print("index:", i, " name:", v)
end
-- 打印结果
-- index: 1 name: Lisa
-- 分析:ipairs 迭代器遇到 nil 值即认为 table 终止,所以尽量避免在 table 中使用 nil 值。
-- 函数的定义
local function function_name (arg1, arg2, ..)
-- 函数体
end
-- 函数示例
local function add(x, y)
return x + y
end
-- 调用 add 函数
add(1, 2) -- return 3
local function add(x, y)
if type(x) == 'number' and type(y) == 'number' then
return x + y, nil
else
return nil, 'not a number'
end
end
local sum, err = add(1, 2)
print(sum, err) -- 3 nil
sum, err = add('abc', 'xyz')
print(sum, err) -- nil not a number
-- 计算平均值
local function average(...)
local sum = 0
local arg = {...}
for i, v in ipairs(arg) do
sum = sum + v
end
return sum / #arg
end
average(1, 2, 3) -- return 2.0
average(1, 2, 3, 4, 5) -- return 3.0
local user = { name = "Alan", gender = "male", age = 15 }
local function update_age (arg)
arg.age = 16
end
update_age(user)
print(user.age) -- 16
-- 模块示例:用户模块
-- user.lua
local _M = {}
_M.get_name = function ()
return "Alan"
end
_M.get_gender = function ()
return "male"
end
_M.get_age = function ()
return 15
end
return _M
-- other.lua
local user = require('user')
local name = user.get_name()
print(name) -- Alan