Lua 基礎知識:

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 基礎知識:)