Lua 语法

本文介绍了Lua语言的基本语法,包括大小写敏感性、注释的使用方式,如单行和块注释。同时,阐述了Lua的八种数据类型,包括nil、boolean、number、string、function、userdata、thread和table,其中前四种是非引用类型,后四种为引用类型。此外,详细讨论了引用计数的概念,通过实例解释了表的创建和变量赋值。还提到了运算符优先级和局部变量的使用,以及控制语句if的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

lua是区分大小写的

lua注释

    --    单行注释

    --[[ code --]]    块注释
    ---[[code --]]    取消块注释

dofile("lua脚本路径")        // 执行lua脚本文件

lua八种数据类型
nil, boolean, number, string, function, userdata, threadtable.
前面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");
将字符串转换为数字 tonumber
print(type(tonumber("123")));
字符串操作函数 http://www.lua.org/manual/5.1/manual.html#5.4
string.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
--]]
泛型 for
tb = {"one", "two", "three"}
for k, v in ipairs(tb) do
	print(k, v)
end
--[[运行结果
1	one
2	two
3	three
--]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值