# 【Lua基础】
# 简单示例
最简单的Lua程序
-- 两个减号后面是注释
print("hello world")
# 变量声明
-- 全局变量
a = "A"
-- 局部变量
local b = "B"
-- 没有被声明的变量都是 nil
print(c)
-- 多重赋值
a,b = 1,2
print(a,b)
# 数值类型
-- 十进制
a = 100
-- 十六进制
b = 0x11
-- 科学计数法,例如下面的值是2 00000 00000
c = 2e10
-- 支持位移运算符,例如1左移3位结果为8
print(1<<3)
# 字符串类型
a = "this is string value"
-- 支持换行转义
b = "abc\nABC"
print(a,b)
-- 使用双中括号可以定义多行文本
a = [[这是任意的多行文本
还支持换行
转义字符\n不会被转义]]
print(a)
-- 使用 .. 进行字符串连接
print("我今年" .. "18" .. "岁")
-- 字符串转数值型
str2num = tonumber("10")
print(str2num + 8)
-- 数值型转字符串
num2str = tostring(1.8)
print(num2str .. "m")
a = "hello world"
-- 输出的长度是11
print("字符串长度是:" .. #a)
# 函数类型
-- 定义方式A
function print_my_age(age)
print("我今年" .. age .. "岁")
end
print_my_age(18)
-- 定义方式B
add_func = function(a,b)
local result = a + b
print("a + b = " .. result)
return result
end
add_func(2,3)
-- 支持多重返回值
add_func = function(a,b)
local result = a + b
return a,b,result
end
local a,b,r = add_func(2,3)
print("a = " .. a .. " b = " .. b .. " r = " .. r)
# Table类型
可以表示数组或者字典
当成数组的使用方式:
-- Table 可以储存数值,字符串,还有函数
local tab = {1,"b",function() print("c") end}
-- Table 里,数组的第一个值的索引下标是 1 开始的,这点需要注意。
tab[3]() -- 这里会调用函数输出c
tab[4] = "d" -- 可以直接利用索引添加值
table.insert(tab,"e") -- 利用自带函数添加数据到数组后面
table.insert(tab,2,"b") -- 也可以在指定下标位置插入数据
table.remove(tab,2) -- 删除指定下标处的数据
print("tab 的长度为" .. #tab) -- tab 的长度为5
当成字典的使用方式:
local dic = {
a = "A",
b = "B",
["c"] = "C"
}
dic["d"] = "D"
print(dic.a)
print(dic["b"])
print(dic["c"])
print(dic.d)
# 全局 _G
print(_G)
a = "A"
print(_G["a"])
print(_G["table"]["insert"])
# 布尔类型
需要注意的是Lua 里 false 和 nil 表示假,否则表示真。就是说 0 也是表示真。
常规比较运算符
print("1>2:" .. tostring(1 > 2))-- 1>2:false
print("1<2:" .. tostring(1 < 2))-- 1<2:true
print("1>=2:" .. tostring(1 >= 2))-- 1>=2:false
print("1<=2:" .. tostring(1 <= 2))-- 1<=2:true
print("1==2:" .. tostring(1 == 2))-- 1==2:false
-- 需要注意的是不等于用 ~= 而不是 !=
print("1~=2:" .. tostring(1 ~= 2))-- 1~=2:true
且或非运算符
需要注意的是 and 和 or 返回的是 a 或者 b 的具体值,而不是只有true false。
可以利用这个特性进行短路求值。
local a = true
local b = false
print("a and b => " .. tostring(a and b)) -- false
print("a or b => " .. tostring(a or b)) -- true
print("not a => " .. tostring(not a)) -- false
# 分支
if 1 > 10 then
print("1 > 10")
elseif 1 < 10 then
print("1 < 10")
else
print("no")
end
# 循环
基本
for i=1,10 do
print("i:" .. i)
end
加上步长2,则输出 1,3,5,7,9
for i=1,10,2 do
print("i:" .. i)
end
可以使用 break 跳出循环 例子输出 1,2,3,4
for i=1,10 do
if i == 5 then break end
print("i:" .. i)
end
while 循环
-- 例子输出 4,3,2,1
local i = 5
while i > 1 do
i = i - 1
print("i:" .. i)
end
← 【正则表达式】