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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • 1.1程序块:Lua执行的每段代码,例如一个源代码文件或者交互模式中输入的一行代码,都称为一个程序块 1.2注释:...
    c_xiaoqiang阅读 2,585评论 0 9
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,357评论 0 17
  • 第一篇 语言 第0章 序言 Lua仅让你用少量的代码解决关键问题。 Lua所提供的机制是C不擅长的:高级语言,动态...
    testfor阅读 2,649评论 1 7
  • 大一的一个学期就这样过去了,直到今天看到国家奖学金名单的公布,心里不由得又郁闷起来。 或许每个人都会这...
    童话故事里的小人物阅读 200评论 0 0
  • 今天再来介绍一个小的优化点,是一个通过使用fastutil工具包对数据格式进行优化。首先来明确一个东西,什么是fa...
    z小赵阅读 5,308评论 1 5