初识Lua

作者: Unity学习的路上 | 来源:发表于2017-03-30 20:15 被阅读0次

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

    相关文章

      网友评论

          本文标题:初识Lua

          本文链接:https://www.haomeiwen.com/subject/xumpottx.html