初识Lua

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指向内存的地址给消除了,内存里的东西还在,没有改变。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,523评论 0 17
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,771评论 0 33
  • 本文参加#萨格拉斯之墓#故事征集活动,本人承诺,文章内容为原创,且未在其他平台发表过。 我 进入...
    白从义阅读 434评论 0 1
  • 让早春的风 穿过晴空下萌动的密林 追赶阳光的脚步 让影子斜躺身后 翠竹掩映桃红 敌不过青春的暖风 我们不仅仅只为自...
    微风LG阅读 182评论 2 2
  • 汽车开进山区,车中一眼看见连绵的山峦,算不得雄伟,让我这个不常出门的人去爬,实在是挑战极限了。除我之外,一行人都酷...
    吾小桐阅读 699评论 0 0