加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Lua语法学习

发布时间:2020-12-14 22:18:15 所属栏目:大数据 来源:网络整理
导读:??? 首先记住一句话、在Lua中、一切都是变量、除了关键字? ? ? 所有的语言、都要用到变量。在Lua中、不管你在什么地方使用变量,都不需要声明,并且所有的这些变量总是全局变量,除非,你在前面加上"local"、这一点要特别注意、因为你可能想在函数里使用局部

??? 首先记住一句话、在Lua中、一切都是变量、除了关键字?
? ? 所有的语言、都要用到变量。在Lua中、不管你在什么地方使用变量,都不需要声明,并且所有的这些变量总是全局变量,除非,你在前面加上"local"、这一点要特别注意、因为你可能想在函数里使用局部变量、却忘了用local来说明?
? ? 至于变量名、它跟c语言一样、大小写也是敏感的、
? ? 定义一个变量的方法就是赋值、"="操作就是用来赋值的?
? ? 我们一起来定义几种常用类型的变量吧、?
? ? 怎么确定一个变量是什么类型的呢?可以用type()函数来检查、
? ? type("helloworld") --string型
? ?Lua支持的类型有以下几种: ?
  A. Nil?
  正如前面所说的、没有使用过的变量的值、都是Nil、有时候我们也需要将一个变量清除、这时候、我们可以直接给变量赋以nil值、
  local Var = nil -- 请注意nil一定要小写?

  B. Boolean?
  布尔值有两种:true和false、在Lua中,只有false和nil才被计算为false、而所有任何其它类型的值、都是true。比如0、空字符串等、都是true、不要被C语言的习惯所误导、0在Lua中就是true、?
  bVar = true

  C. Number?
? ?在Lua中、数值相当于C语言的double、可表示任何32位整数?
  在Lua中、是没有整数类型的、也不需要、一般情况下,只要数值不是很大、是不会产生舍入误差的、表示方法同C语言类似、如:?
  4 0.4 4.57e-3 0.3e12 5e+20?

  D. String?
    字符串在Lua中有几种方法来表、最通用的方法、是用双引号或单引号来括起一个字符串的,如:?
    "This is a string."?
? ? ? ? 不过在Lua中不能像c语言中那样直接修改字符串的某个字符、而是根据修改来创建一个新的字符串、比如:
? ? ? ? a = "one string"
? ? ? ? b = string.gsub(a,"one","another") -- change string parts
? ? ? ? print(a) ?--> one string
? ? ? ? print(b) ? --> another string
    和C语言相同的,它支持一些转义字符,列表如下:?
    a bell?
    b back space?
    f form feed?
    n newline?
    r carriage return?
    t horizontal tab?
    v vertical tab?
     backslash?
    " double quote?
    [ left square bracket?
    ] right square bracket?

  E. Table?
   关系表类型、这是一个很强大的类型、我们可以把这个类型看作是一个数组、只是C语言的数组只能用正整数来作索引、在Lua、你可以用任意类型来作数组的索引、除了nil、同样、在C语言中、数组的内容只允许一种类型、在Lua中、你也可以用任意类型的值来作数组的内容、除了nil
    Table的定义很简单,它的主要特征是用"{"和"}"来括起一系列数据元素的。比如:?
    T1 = {} -- 定义一个空表?
    T1[1]=10 -- 然后我们就可以象C语言一样来使用它了、
? ? ? 再如:
    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"}?
    这是一个很强的特性、反正按自己的习惯来写、怎么习惯、怎么舒服怎么来
    在定义表的时候,我们可以把所有的数据内容一起写在"{"和"}"之间,这样子是非常方便,而且很好看。比如,前面的T1的定义,我们可以这么写:?
    T1=?
    {?
      10,-- 相当于 [1] = 10?
      [100] = 40,?
      John= -- 如果你原意,你还可以写成:["John"] =?
      {?
        Age=27,-- 如果你原意,你还可以写成:["Age"] =27?
        Gender=Male -- 如果你原意,你还可以写成:["Gender"] =Male?
      },?
      20 -- 相当于 [2] = 20?
    }?
    需要注意三点:?
    第一,所有元素之间、总是用逗号","隔开;?
    第二,所有索引值都需要用"["和"]"括起来;如果是字符串,还可以去掉引号和中括号;?
    第三,如果不写索引、则索引就会被认为是数字、并按顺序自动从1往后编?

  F. Function?
    函数,在Lua中,函数的定义也很简单。典型的定义如下:?
    function add(a,b) -- add 是函数名字,a和b是参数名字?
     return a+b -- return 用来返回函数的运行结果?
    end?
    函数其实也是一种变量类型吗、上面的函数定义、其实相当于:?
    add = function (a,b) return a+b end?
    当你重新给add赋值时、它就不再表示这个函数了、所以、你的变量名是不能取跟函数名一样的、你甚至可以赋给add任意数据、包括nil、
    和C语言一样、Lua的函数可以接受可变参数个数、它同样是用"…"来定义的、比如:?
    function sum (a,b,…)?
    如果想取得…所代表的参数,可以在函数中访问arg局部变量(表类型)得到。?
    如 sum(1,2,3,4)?
    则,在函数中,a = 1,b = 2,arg = {3,4}?
    更牛逼的是、它可以同时返回多个结果、比如:?
    function s()?
      return 1,4?
    end?
    a,c,d = s() -- 此时,a = 1,c = 3,d = 4?

    前面说过、表类型可以拥有任意类型的值、包括函数!因此,有一个很强大的特性是、拥有函数的表、Lua可以使用面向对象编程了、
    t =?
    {?
     Age = 27?
     add = function(self,n) self.Age = self.Age+n end?
    }?
    print(t.Age) -- 27?
    t.add(t,10)?
    print(t.Age) -- 37?

    t.add(t,10) 这一句实在是有点土对吧?没关系、在Lua中、你可以简写成:?
    t:add(10) -- 相当于 t.add(t,10)?

参考文献:《Programming in lua

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读