Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放,
其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
Lua特性说明
1.采用标准c语言编写,编译后源码仅100多k
2.丰富的扩展接口和机制,自动内存管理
3.支持面向过程和函数式编程
应用场景
1.独立应用脚本
2.游戏开发
3.web应用脚本
.....
热更新
热更新技术就是可以在不重新下载客户端的情况下,实现更新游戏内容常见于移动端。
c#代码必须经过编译,编译过程无法在移动平台完成,所以当游戏逻辑变更的时候,必须要在开发环境下对源文件重新编译,上传用户体验差,浪费时间
Lua基本语法
print()是Lua中内置的输出语句
Lua中的字符串用””或者’’都可以
�Lua中每一条语句都不需要分号(;)结束
--> 变量
print(var)
gVar = 0 -- 全局变量
--lua中是没有数据类型的
var = 0
print(type(var)) -- number
var1 = 0.2
print(type(var1)) -- number
在lua中number相当于C#中的值类型(int float double)
默认number 就是 double
var5 = function ()
print("lua")
end
print(type(var5)) -- function类型
var6 = {}
print(type(var6)) -- table类型
演示局部变量和全局变量,这里的do和end 与C#中的{}差不多
do
c = 5 -- 默认是全局变量
local c2 = 1 -- 局部变量
end
print(c,c2) -- 打印出来的就是 5 nil
lua可以对多个变量同时赋值,变量列表和值列表 各个元素之间用,隔开,赋值语句右边会依次赋值给左边
x,y,z = 1,2,3 --如果左边只有x,y 那x = 1 y = 2 ,3不管 如果右边只有1,2那z = nil
运算符 + - * / %(取余) ^(次方) -(负)
关系运算符 > >= < <= == ~=(不等于)
逻辑运算符 and(&&) or(|) not(!)
连接运算符 ..(相当于C#中的 + )
长度运算符 # 能够得到字符串,表..的长度
运算符优先级,由高到低
^
not -
* /
+ -
..
> >= < <= == ~=
and
or
Lua分支结构
if双分支结构
a = 50
if (a < 0) then
print("a的值小于0")
else
print("a的值大于等于0")
end
if-elseif-else结构
a = -1
if(a>0)then
elseif(a < 0)then
print("a的值小于0")
elseif(a == 0)then
else
end
Lua循环之 while循环
输出1-100的和
sum = 0
a = 0
while(a <= 100)
do
a = a + 1
sum = a + sum
if(a == 100)then
print(sum)
break
end
end
Lua循环之 repeat..until
输出15句hello world
a = 10
repeat
print("hello world")
a = a + 1
until a > 15
Lua循环之for循环
输出100以内的奇数
for i=1,100 do
if(i % 2 == 1)
then
print(i)
end
end
Lua的函数
1.无参无返回值
function Say()
print("LUA")
end
-->函数的调用
Say()
无参有返
-- var = function()
-- return "lua"
-- end
-- print(var())
有参无返
var = function (arg)
print("hello"..arg)
end
var(" lua")
有参有返
var = function (a,b)
return a+b
end
print(var(2,1))
演示函数作为参数传递给函数
function MyFunc(para)
para()
end
function Say()
print("hello")
end
MyFunc(Say)
演示2
function MyPrint(param)
print("两个数的和为",param)
end
function Add(num1,num2,funcParam)
result = num1 + num2
funcParam(result)
--return result
end
Add(10,2,MyPrint)
在lua中函数可以有多个返回值
function F(a,b)
return a+b,a-b,a*b,a/b
end
var,var1,var2,var3 = F(10,10)
print(var,var1,var2,var3)
lua中函数的可变的参数列表
function Sum( ... )
print("求和函数")
local args = {...}
print("总共传入"..#args.."个参数")
sum = args[1] + args[2]
print(sum)
end
Sum(1,5)
数组
array = {"c#","unity","lua"}
for i=1,3 do
print(array[i])
end
这里需要注意lua中的数组是从1开始的,当然你也可以自定义下标
二维数组
array = {}
for i=1,3 do
array[i] = {}
for j=1,3 do
array[i][j] = i * j
end
end
for i=1,3 do
for j=1,3 do
print(array[i][j])
end
end
演示泛型迭代器
days = {"星期一","星期二","星期三","星期四","星期五",
"星期六","星期七"}
for index,value in pairs(days) do
print(index,value)
end
这里的index和value可以改名字但是不能赋值
Lua 表
gMyTable = {
["name"] = "lucy",
["age"] = 18,
["sex"] = "woman",
["name"] = "lily",
"测试",
"测试1"
}
表中的数据的存储都是放在栈中,可以存放数组,可以存放字典,也可以全放在一个表中
for k,v in pairs(gMyTable) do
print(k,v)
end
这样读取表中数据可以全部读取
for i,v in ipairs(gMyTable) do
print(i,v)
end
这样读取就只能读取数组,并且是从1开始连续的数组
当表中有两个一样的Key值时 根据Key值取的value值一定是后面进栈的元素而不是先进栈的那个元素
t1 = {}
t1["key"] = "修改前"
t2 = t1
t2["key"] = "修改后"
print(t2.key) --- 修改后
print(t1.key) --- 修改后
t2 = nil
print(t1.key) --- 修改后
首先t1和t2都只是引用变量 都指向了同一个地方,当t2改变了表中的数据后,在用t1得到的值一定是修改后的值,
而 t2 = nil 后只是将t2指向内存的地址给消除了,内存里的东西还在,没有改变。
网友评论