• lua 语言基础


    1.变量定义:

      num = 2+2

      num = "2"+2

      num = "2"+"2"

      str = "string"..'string'

      str = [[

          string

          ]]

    2.定义表格:

      tab = {k="kk",v="vv"}

      tab = {k="kk","vv"}  

      tab = {"kk"."vv"}

      tab = {}

        tab["key"] = "xiaolang"

        print(tab["key"]) xiaolang

           print(tab.key) xiaolang

    3.程序循环:    break跳出

      for循环:

      for i=1,102 do

        print(i)

      end      13579

      for i=1,5 do

      j=j+i

        print(j)

      end 1361015

      t = {a=100,10,20,[5]=30}

      for key,value in ipairs(t) do

         print(key,value)

      end    1 102 20  ipairs遇到nil停止,需要下标、用于迭代 array 形式的 table

      

      for key,value in pairs(t) do

         print(key,value)

      end 1 102 20,a 1005 30  pairs完全遍历, pairs 可以用来迭代字典形式的 table

      while循环:

      while(i<5)

      do

        print(i)

        i=i+1

      end

      repeat...until 循环:

      i=0

      repeat

          print(i)

      i=i+1

      until( i>5 )

    4.Function方法+If判断:

      function factorial(n)

           if n == 0 then

               return 1

           else

               return n * factorial(n - 1)

           end

      end

      print(factorial1(5)) 120

    5.协同程序(coroutine)+ 线程(thread):

      在 Lua 里,最主要的线程是协同程序(coroutine)。它跟线程(thread)差不多,拥有自己独立的栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西。

      线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起(suspend)时才会暂停。

      userdata(自定义类型):

      userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用。

    6.模块编辑:

      -- 文件名为 module.lua ,之后定义一个名为 module 的模块

      module = {}

      module.constant = "常量"

      -- 定义一个函数

      function module.function1()

          io.write("公有函数!")

      end

      local function function2()

          print("私有函数!")

      end

      function module.function3()

          function2()

      end

      return module

      调用模块:

      require("module")

      print(module.constant)

      module.function3()

    7.Lua 查找一个表元素(Metatable)时的规则:

      1.在表中查找,如果找到,返回该元素,找不到则继续

      2.判断该表是否有元表,如果没有元表,返回 nil,有元表则继续。

      3.判断元表有没有 __index 方法,如果 __index 方法为 nil,则返回 nil;如果 __index 方法是一个表,则重复 123;如果 __index 方法是一个函数,则返回该函数的返回值。

      初始化:mytable = setmetatable({},{}) >>>>>    mytable = setmetatable({key1 = "value1"}, { __index = { key2 = "metatablevalue" } })

          返回对象元表:getmetatable(mytable)    >>>>>    print(mytable.key1,mytable.key2)

      

    8.定义原方法:__add    (两个英文下划线)

      function table_maxn(t)

          local mn = 0

          for k, v in pairs(t) do

              if mn < k then

                  mn = k

              end

          end

          return mn

      end

      -- 两表相加操作 ****重要操作****

      mytable = setmetatable({ 1, 3, 2 }, {

        __add = function(mytable, newtable)

          for i = 1, table_maxn(newtable) do

            table.insert(mytable, table_maxn(mytable)+1,newtable[i])

          end

          return mytable

        end

      })

      secondtable = {6,5,4,7}

      mytable = mytable + secondtable

              for k,v in ipairs(mytable) do

      print(k,v)

      end 1  1,2  3,3  24  65  5,6  47  7

    9.coroutine:(协程逻辑)

      local newProductor

      function productor()

           local i = 0

           while true do

                i = i + 1

                print("aaa")

                send(i)     -- 将生产的物品发送给消费者

                print("fff")

           end

      end

      j=0

      function consumer()

           while j<10 do

              j=j+1

                local i = receive()     -- 从生产者那里得到物品

                print(i)

           end

      end

      function receive()

        print("ccc")

           local status, value = coroutine.resume(newProductor)

           return value

      end

      function send(x)

        print("bbb")

           coroutine.yield(x)     -- x表示需要发送的值,值返回以后,就挂起该协同程序

      end

      -- 启动程序

      newProductor = coroutine.create(productor)

      consumer()

    支持个人观看使用,如商用或转载,请告知! -----萧朗(QQ:453929789 Email:xiaolang_xl@sina.com)
  • 相关阅读:
    WebService之使用CXF偶遇的BUG
    修改Web项目的名称后,在TomCat中部署项目,项目的名称还是与原来相同的解决方案
    JAVA面试题一 之 io流的操作
    第四天 字符串的格式化输出
    第三天 while循环 及其用法
    第二天 注释 、运算符,文件扩展名
    第一天 python入门 基础 “”“Hello World”和if-elif的使用、数据类型
    62. (待补)统计一个字符在字符串中出现次数 与 统计一个字符串在另一字符串中出现次数。
    61. 解析linux密码配置文件,获取配置文件信息,每行归纳为一个指针数组存入内存, 练习文件,数组,指针,字符串处理相关的配合使用要点
    60. 去字符串中的空格,去左空格,去右空格,去全部空格。
  • 原文地址:https://www.cnblogs.com/XiaoLang0/p/12176150.html
Copyright © 2020-2023  润新知