lua是区分大小写的
lua注释
-- 单行注释
--[[ code --]] 块注释
---[[code --]] 取消块注释
dofile("lua脚本路径") // 执行lua脚本文件
lua八种数据类型
nil, boolean, number, string, function, userdata, thread, table.
前面4种是非引用数据类型,后面4种是引用数据类型
a = { } -- 程序执行时首先在内存中为table分配内存空间,并且为a也分配内存空间,将a引用到table { },table { }的引用计数加1。
b = a -- b 也 引用到 a 所引用的表,table { }的引用计数再加1。变为2
c = 10 -- c 是非引用类型,将会为c分配内存空间,将10直接存入c分配的变量空间里,不会为10开辟新的空间。
全局和局部变量定义
a = 1 全局变量定义
local a = 1 局部变量定义
查看变量类型 print(type(a))
转义字符 跟C语言相同在lua中 nil 和 false 会使一个条件为false,其他的所有都表示true,包括0。
字符串的两种打印方式
print("hello world")
print([[
hello
world
]])
将两个字符串连接 .. print("hello".."World");
将字符串转换为数字 tonumberprint(type(tonumber("123")));
字符串操作函数 http://www.lua.org/manual/5.1/manual.html#5.4string.len (s) 求字符串长度
string.lower (s) 字符串小写
string.upper (s) 字符串大写
函数赋值
function add(a,b)
return a + b
end
c = add
print(c(10, 20))
引用计数清零function, userdata table 是对象, 变量不是真正的包含这些值,而是引用它们,赋值、参数传递、函数返回总是引用这些值,不会对这些值做拷贝的。是直接的指向。如:
c = add
d = add
add被引用两次,Lua的内存管理是GC(Garbage Collection,垃圾回收)实现的, GC 发现对象的引用计数大于0次的时候,GC是不会回收引用计数大于0的对象。
使用完变量,想让GC回收的话必须把引用计数归零,把 c , d 置空。
d = nil
c = nil
lua运算符优先级
^not -
* /
+ -
..
== ~= > >= < <=
and
or
表的初始化
a = {x = 100, y = 200}
a.z = 300
print(a.x)
print(a.y)
print(a.z)
op = { ["-"] = "add", ["-"] = "sub" }
print(op["-"])
tb = {100,200,300}
print(tb[1]) --开始下标是1
赋值语句a, b, c = 1, 2, 3 -- 多个变量赋值
print(a)
print(b)
print(c)
a = 10
b = 20
a, b = b, a -- 对值进行交换
print(a)
print(b)
a, b, c = 1, 2 -- 值得个数不足补 nil
print(a)
print(b)
print(c)
a, b, c = 1, 2, 3, 4 -- 值得个数多余忽略
print(a)
print(b)
print(c)
局部变量
function add1(a, b)
s = a + b
return s
end
add1(10, 11)
print(s)
function add2(c, d)
local f = c + d
return f
end
add2(20,12)
print(f) -- 局部变量f访问不到
控制语句(if)
a = 30
b = 20
if a < b then
print("a < b")
else
print("a > b")
end
--[[
运行结果
a > b
--]]
控制结构语句(while repeat)b = 10
while b < 15 do
print(b) -- 10 11 12 13 14
b = b + 1
end
--[[
10
11
12
13
14
--]]
repeat
print(b) -- 15 14 13 12 11 10
b = b - 1
until b < 10 -- 条件为 false 继续执行
--[[
15
14
13
12
11
10
--]]
数值循环(for)for i=1, 5, 2 do -- 第一个参数是初始值,第二个参数是终止值,第三个参数是步长
print(i)
if i == 3 then
break
end
end
--[[
1
3
5
--]]
泛型 fortb = {"one", "two", "three"}
for k, v in ipairs(tb) do
print(k, v)
end
--[[运行结果
1 one
2 two
3 three
--]]