LUA
LUA
运行环境
在线测试环境
变量
-- 全局变量
a = 1
-- 局部变量 只能当前作用域可用
local b = 1
-- 没有被声明的变量都是nil
-- c的打印结果就是nil
print(c)
-- 多重赋值
e,f = 1,2
print(e,f)
数据类型
数值型number
-- 数值型 普通十进制表示 16进制表示 科学计数法 2e10 = 2后面根10个0
a = 1
b = 0x11
c = 2e10
print(a,b,c)
-- 转为number型,转换失败结果是nil
h = tonumber("10")
字符型string
-- 单引号、双引号都行
a = 'wdy'
b = "wdy"
print(a,b)
-- 支持转义字符
c = "wdy\nhahaha"
print(c)
-- 完完整整的保留所有字符
d = [[wdy“\nha
haha]]
print(d)
-- 字符串拼接使用..
f = a..b
-- 数值型转为字符型
g = tostring(10)
print(g)
h = tonumber(g)
print(h,tonumber("g")) -- 转换失败就是nil
-- 使用#获取字符串长度
print(#a)
-- 0的ascii码就是0x30 1的ascii码就是0x31 2的ascii码就是0x32
local x = string.char(0x30,0x31,0x32) -- 结果012
print(x)
-- 0x31转换成10进制49
local n = string.byte(x,2) -- 结果49
print(n)
布尔型真假
a = true
b = false -- lua里面只有flase 和 nil 代表假 0是代表真的
print(a and b)
print(a or b)
print(not a)
-- 根据真假直接返回所代表的值
c = nil --假 只有flase 和 nil 代表假
d = 0 --真
e = 100 -- 真
print(c and d) -- 结果nil
print(c or d) -- 结果0
--短路逻辑(第一个值就能确定满足条件,直接返回第一个值)
print(a or d) -- 结果true
-- (第二个值才能确定满足条件,返回第二个值)
print(d and e) -- 结果100
-- not纯粹返回true或者false
print(not d)
-- 利用and or实现三目运算
b = 1
print(b > 10 and "yes" or "no")
-- 大于等于小于不等于
print(1>2)
print(1<2)
print(1>=2)
print(1<=2)
print(1==2)
print(1~=2)
运算符
a = 1
b = 2
-- 支持 + - * /
print(a + b,a - b,a * b,a / b)
-- 支持 指数
print(b^3)
-- 支持 左移右移
print(b<<3)
函数Function
两种格式等价
function function_name( ... )
-- body
end
function_name = function ( ... )
-- body
end
实例
function add1(a,b)
print(a+b)
end
add2 = function (a,b)
print(a+b)
end
-- 调用
add1(1,2)
add2(4,2)
-- 可以return多个返回值
function add(a,b)
return a+b,a-b,a*b
end
print(add(1,5))
-- 多个返回值可以进行多重赋值
local x,y,z = add(4,5)
print(x,y,z)
数组table
-- table的下标从1开始
print(a[1],a[2],a[3],a[4],a[5],a[6])
-- 直接用下标赋值 测试下来可以给0下标赋值
a[0] = "hhh"
print(a[0])
a[6] = "hhh"
print(a[6])
-- #获取长度 a[0]赋值了但是不算长度
print(#a)
-- 使用table.insert插入值
table.insert(a, "d") -- 从最后插入
table.insert(a, 2, "d") -- 从 2位置插入,原来2及以后位置全部往后移动
-- 使用table.remove移除值,移除的值回返回
local removeValue = table.remove(a, 2)-- 2位置移除,原来3及以后位置全部往前移动
print(removeValue)
-- 字符作为下标的情况和数字作为下标的情况同时存在时 非字符下标的值下标从1开始往后递增
a = {a = 1, b = "a", c = 'sd', d = {2,3}, f = function(a,b) return a+b end, 2}
print(a[1],a[2],a[3],a[4],a[5],a[6]) -- 结果 2 nil nil nil nil nil
print(a["a"])-- 结果 1
a["a"] = 100
print(a["a"])-- 结果 100
全局表_G
-- 大写G,小写的不行
print(_G) -- 结果table: 0x3
-- 所有的全局变量都在这个_G里面
function add(a,b)
return a+b,a-b,a*b
end
a = 100
print(_G["a"])
-- 声明的函数也存在_G里面
print(_G["add"](1,2))
f = _G["add"]
print(f(1,2))
分支判断
a = 9
if a > 10 then
print("a > 10")
elseif a == 10 then
print("a = 10")
else
print("else")
end
循环
-- for while repeat(和while差不多的)
for i=1,10 do --i出了代码块就没有意义了
print(i)
end
for i=1,10,2 do --2是步长 步长也可以为负数
print(i)
end
-- 不允许改变i的值
for i=1,10,2 do
print(i)
i = 1 -- 这里面设置i是没用的,默认会变成 local i=1
end
-- break语句 lua没有continue
for i=1,10 do
if (i == 5) then
break
end
print(i)
end
-- while语句
local n = 10
while n > 1 do
print(n)
n = n - 1
end
-- while语句也可以使用break
local n = 10
while n > 1 do
if (n == 5) then break end
print(n)
n = n - 1
end
浙公网安备 33010602011771号