美文网首页
Lua 基礎知識:

Lua 基礎知識:

作者: 魁犸 | 来源:发表于2017-07-22 01:12 被阅读15次

    Lua 編程:

    程序控制語句:

       條件控制  : if 條件 then ... elseif 條件 then .... else ... end

       while 循環: while 條件 do ... end

       Repeat 循環: repeat .....until 條件

       For 循環: for  变量=初始值,终止值 ,步进 do ...end

       For 循环:

    语句块:

           用do 和 end 括起来的   

           do print("hello") end

    变量赋值: 

          默认情况下 变量总是认为是全局的,如果你要定义局部变量 要在定义变量的时候 用Local 修饰

          可以多赋值  a, b , c= 1 ,2 ,3

    数值运算符:

           基本的数据操作:    + ,- ,* ,/

                                           还包括 ^  表示指数的乘法运算  例如 2^3 结果为8

                                           字符串连接 “ .. ”运算符

    比较运算符:

                          <,>, <=, >=, ==, ~=

                          分别表示 小于,大于,不大于,不小于,相等,不相等

    逻辑运算符:

                         and, or, not  这里需要注意的是只有false和nil 才能计算为false ,其它任何数据都计算为true ,0也是true 

                         和C不一样的地方, and 和 or 的运算结果不是true和false 而是和它的两个操作手机相关:

                                  a  and  b   如果a 为false  则返回 a 否则返回b

                                  a  or b       如果a 为true  则返回a 否则返回b

    变量类型:

    Nil 空值   所有没有使用过的变量都是Nil  nil 即是值也是类型

    Boolean   布尔值

    Number    数值   相当于C语言中double 

    String       字符串 

    Table        关系表类型  

    Function   函数类型      函数也是一种类型,也就是说 所有函数 它本身就是一个变量

    Userdata  这个类型专门用来和Lua宿主打交道,Userdata 可以是宿主的任意数据类型 通常是Struct 和指针

    Thread    线程类型 

    变量的定义:

          ...

          Table: 关系表类型 。我们可以把这个类型看作一个数组。在这个数组中你可以使用除nil 之外的所有数据类型作为索引

                       定义:  T1={}   -- 定义一个空表

                                   T1[1]=10  --在表T1中插入一个值

                                   T1["John"]={Age=27,Gender="Male"}

                                                   --这句相当于   T1["John"]={}

                                                                          T1["John"]["Age"]=27

                                                                          T1["John"]["Gender"]="Male"

                                                    当表的索引是字符串的时候 可以简写成:

                                                                          T1.John={}

                                                                          T1.John.Age=27

                                                                          T1.John.Gender="Male"    或者  T1.John{Age=27,Gender="Male"}

    Table 关系表中可以存放任何数据类型 包括函数

       例如: T={

                               age=10,

                               add=function(self,t)  self.age=self.age+t end

                        }

              两种调用方式:

                 t.add(t,10)

                 t:add(10)

                 注意: Lua中只有一种基本的数据结果 就是table 其他的数据结构都由table 组成

                          

    Function

       函数的定义:

                      function add(a,b)

                            return a+b

                      end

                     这句话相当于  add = function(a,b) return a+b end

                     此外 还可以给add 赋值(任何数据类型) 赋值之后add就不在表示上面个这个函数

       函数参数:

                  Lua 的函数参数可以接受可变的参数个数,它同样用"..."来定义

                  例如:function sum(a,b,...)

                  在函数体内可以通过arg(局部变量, 表类型)来访问"..."代表的参数

                      例如:  sum(1,2,3,4) 在函数中,a = 1, b = 2, arg = {3, 4}

       函数返回值:

                   Objec[] objs=  function s()  return 1,2,3,4 end 

    注意: Lua中只有一种基本的数据结果 就是table 其他的数据结构都由table 组成

    Lua 迭代器:

             迭代器 iterator 是一种对象,能够遍历标准模板库容器的部分或全部元素,每一个迭代器对象代表容器种的确定的地址在Lua中的确定的地址,在Lua中迭代器是一种支持指针类型的结构,他可以遍历集合的每一个元素。

        Lua 默认提供的迭代函数 ipairs。

    array={"Lua","Tutorial"}

    for key,value in ipairs(array)

     do

     print(key,value)

    end                  

    以上代码执行输出结果为:

    1  Lua

    2   Tutorial

    Lua 模块和包

          定义:

     Lua的模块是由变量,函数等元素组成的table   因此创建一个模块很简单   就是创建table,然后把需要的常量,函数放入其中,最后返回这个table 。

    module={}                                                                      --定义一个module 模块

    module.constant="这是一个常量"                                 --定义一个常量

    function module.func1()                                               -- 定义一个函数

          io.write("这是一个公有函数!\n")   

     end  

    local function func2()                                                 --定义一个私有函数 

        print("这是一个私有函数")

    end

    function func3()                                                         --调用 公有函数调用私有函数

        func2()

    end

       require 函数:

            Lua提供了一个名为require的函数用来加载模块。

            require("<模块名>") 或者 require"<模块名>"

    元表(Metatable

          作用:对两个table 进行操作,因为Lua提供了元表(Metatable) 运行我们改变table的行为,每一个行为都关联了对应的元方法。

          定义元表的两个重要的方法:

                      setmetatable(table,metatable):对指定table设置元表(metatable),如果元表(metatable)中存在__metatable键值,setmetatable会失败 。

                        getmetatable(table):返回对象的元表(metatable)。

    Lua 协同程序(coroutine)

           什么是协同:

                  Lua 协同程序(coroutine)与线程比较类似:拥有独立的堆栈,独立的局部变量,独立的指令指针 同时又与其他的协同程序共享全局变量和其他大部分东西。

           线程和协同程序的区别:

                 线程与协同程序的主要区别在于,一个具有多线程的程序可以同时运行几个线程,而协同程序却需要彼此协作运行,在任意一个时刻只有一个协同程序在运行,并且这个正在运行的协同程序只有在明确被挂起的时候才能被挂起。

           几个重要的函数:

         coroutine.creat()           -- 创建新的

          coroutine.resume()      -- 调用resume,将协同程序唤醒,resume操作成功返回true,否则返回false;

         coroutine.yield()           -- 线程

         coroutine.warp()          --

         coroutine.running()

         coroutine.status

    相关文章

      网友评论

          本文标题:Lua 基礎知識:

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