• lua【卤鹅】总结


    转自:https://www.cnblogs.com/reblue520/p/10767428.html

    编写一个简单的hello world程序

    test.lua

    如果觉得简单,可以给一个for循环,打印1~10

    正常执行,说明lua环境安装没有问题

    二.lua语言的基本语法

    1. lua的值和类型

    数值:

    1,2,3

    1.2 3.14

    字符类型

    "hello world"

    Table类型

    --lua的table,不需要预定义长度,保证数组在首次赋值的时候在最大索引加1

    --没有类型限制

    --下标从1开始,自动扩容

    --table = 数组+映射

    --第一种写法

    a={}

    a[1]=10

    a[2]=20

    a[3]="hello"

    print(a[1],a[2],a[3])

    --第二种写法

    a={

            10,

            20,

            "hello"

    }

    print(a[1],a[2],a[3])

    -- 映射的另外写法

    a = {}

    a["hello"]=2

    a[3]=false

    print(a.hello, a[3])

    --别的写法

    a={

            ["hello"]=2,

            [3]=false,

    }

    print(a.hello,a[3])

    1. lua的函数

    -- 加法函数

    function add(a,b)

                    return a+b

    end

    --调用函数

    print(add(1,2))

    --调用函数不同的写法

    function add(a,b)

                    return a+b

    end

    a = add(1,2)

    print(a)

    --另外的写法

    add = function(a,b)

                    return a+b

    end

    foo =add

    print(foo(1,2))

    --函数返回多个值,返回加法和减法

    function add(a,b)

                    return a+b,a-b

    end

    print(add(1,2))

    1. lua中多变量的赋值

    a,b = 1,2

    print(a,b)

    --交换变量

    a,b = b,a

    -- 默认值为nil

    a,b = 1

    -- 多余的值会忽略

    a,b = 1,2,3

    1. lua的表达式

    a= 1 + 1

    print(a)

    a=1

    b=2

    print((b+2)*3)

    -- lua没有 ++

    c = 1

    c = c + 1

    print(c)

    5.  lua的逻辑表达式

    --and 两个都为true,返回true,否则返回false

    --or 任意一个为true,返回true

    --not 取反

    print(true and false)

    6. lua拼接字符串,使用 两个点号 ..

    print("hello".." world")

    7. --lua变量的范围

    -- 全局变量

    function foo()

                    a = 1 -- 全局变量

    end

    foo()

    print(a) -- 为1

    -- 局部变量 一般使用local关键字修饰 ,我们在lua开发中应该尽量使用local局部变量

    function foo()

                    local a = 1 -- 局部变量,local为作用域控制关键词,分隔开,利于阅读,还有优化作用

    end

    foo()

    print(a) -- 为nil

    8. lua的流程控制,判断和循环

    -- 老段子:老婆,包子和西瓜

    -- 老婆打电话给程序员老公打了个电话:下班顺路买一斤包子回来,如果看到卖西瓜的就买一个

    -- 当天晚上回来程序员带回来一个包子,老婆怒道:你怎么就买了一个包子,程序员:因为我看到了卖西瓜的啊

    -- 当看到卖西瓜的就买一个包子,没有看到卖西瓜的就买1公斤包子

    if foundWatermelon() then

                    buy("baozi","1")

    else

                    buy("baozi","1kg")

    end

    a.while循环,循环打印0-9

    local i = 0

    while i < 10 do

                    print(i)

                    i = i + 1

    end

    --lua的for数值遍历

    --for (int i = 0;i < 10; i ++)

    --{

    --             printf("%d ",i);

    --}

    --打印1到10

    for i = 1,10 do

                    print(i)

    end

    --等价于

    for i = 1,10,1 do

                    print(i)

    end

    -- 倒叙打印

    for i = 10,1,-1 do

                    print(i)

    end

    b. lua的for泛型遍历

    for的泛型遍历: pairs() ipairs() 迭代器

    -- pairs是内部的函数,功能就是可以把一个table里面的所有部分 全部遍历

    a= {

                    ["foo"]=1,

                    [100]=true,

                    [1]=20,

                    [2]=30,

    }

    for k,v in pairs(a) do

                    print(k,v)

    end

     

    -- ipairs 功能变化了,只遍历数组部分

    a= {

                    ["foo"]=1,

                    [100]=true,

                    [1]=20,

                    [2]=30,

    }

    for k,v in ipairs(a) do

                    print(k,v)

    end

    三、lua的包管理

    -- lua的包(package)

    local c = require("foo") -- 作为文件名搜索,默认搜索当前目录

    print(c)

    print(c.foo(1,2))

    -- foo.lua 的代码

    local class={}

    function class.foo(a,b)

                    return a + b

    end

    -- 另外的写法,class的映射:class.foo,foo键的 值为一个函数

    --class.foo = function (a,b)

    --             return a + b

    --end

    -- lua的一个特点,可以把全局代码当做一个值返回

    return class

    -- 美化后

    local socket = require("foo") -- 作为文件名搜索,默认搜索当前目录

    print(socket)

    print(socket.send(1,2))

    -- fooo.lua

    local class={}

    function class.send(a,b)

                    return a + b

    end

    -- 另外的写法,class的映射:class.foo,foo键的 值为一个函数

    --class.foo = function (a,b)

    --             return a + b

    --end

    -- lua的一个特点,可以把全局代码当做一个值返回

    return class

    -- require 加载文件,运行,推荐使用

    -- dofile --加载并运行,可以多次加载,老的写法

    -- lua从5.3 以后没有dostring功能了

    print("require")

    for i = 1,2 do

                    print(require("foo"))

    end

    print("dofile")

    for i = 1,2 do

                    print(dofile("foo.lua"))

    end

    -- 运行结果

    E:softwarelua5.3>lua53.exe test.lua

    require

    table: 008182a8 -- table相同,表示同一个

    table: 008182a8

    dofile

    table: 00817c68

    table: 0081e350

    lua的系统库

    -- 批量插入table键值

    local t = {}

    for i = 1,10 do

                    table.insert(t,i)

    end

    for k,v in pairs(t) do

                    print(k, v)

    end

    print(t)

    -- 删除数组中的元素

    table.remove(t,2)

    -- 循环打印table 结果:

    for k,v in pairs(table) do

                    print(k, v)

    end

    E:softwarelua5.3>lua53.exe test.lua

    table: 00eb87d0

    move    function: 69e96240

    sort    function: 69e96ee0

    insert  function: 69e96720

    remove  function: 69e96550

    concat  function: 69e96890

    unpack  function: 69e95e30

    pack    function: 69e95fa0

    --删除元素的另外写法

    local t = {}

    t.a = 1

    t.b = 2

    -- 删除一个值

    t.a = nil

    for k,v in pairs(t) do

                    print(k, v)

    end

    获取lua中对象的长度

    -- # 可以获取对象的长度,对象一般指的就是字符串和table

    local t = {5, 1 ,3 ,4, 12}

    local s = "hello world"

    -- 得到table的长度

    print(#t)

    -- 取字符串的长度

    print(#s)

    -- type获取类型

    print(type(s))

    -- 字符转换为数字

    local a = tonumber("3.14")

    print(a, type(a))

    -- 数字转换为数字

    local b = tostring(3.14)

    print(b, type(b))

    -- string.format 把一个字符串按照格式构造出来

    print(string.format("hi %d", 20))

    总结:

  • 相关阅读:
    在Docker中启动Nacos-Server
    maven配置阿里云公共仓库
    Centos7动态IP改静态后SSH很慢
    Vue+NodeJS的跨域请求Session不同
    一款非常简洁漂亮方便调用的jQuery前端分页
    springmvc后台接收List参数的几种办法
    net use命令详解(转)
    c#开发windows服务
    c# base64转字符串
    关于web api 验证
  • 原文地址:https://www.cnblogs.com/silentdoer/p/11865675.html
Copyright © 2020-2023  润新知