• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Lua语言入门

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
  • 时间:2018-03-12 记录:byzqy

1、lua语法基础:程序块

  • lua中连续的语句之间不需要使用分隔符,如果需要分隔,可以使用分号(;)进行分隔!
  • lua中换行是不起作用的,会被当做一个空格来处理。
  • lua中在书写连续的语句时可以不换行,这也是合法的。但是由于可读性太差,所以不推荐!
  • cmd中输入:lua 然后点击回车,可以运行lua解释器。会显示lua版本信息,并进入lua命令提示符!
  • 在cmd的lua命令提示符中,按下Ctrl+Z,可以退出lua命令提示符,回到cmd命令提示符!
  • 使用记事本自定义一个fact.lua的文件,在文件中添加一个函数。然后在cmd中输入:lua -i “c:\demo\fact.lua”,将会先执行脚本定义的函数,然后才会进入到lua命令提示符交互模式!参数 -i 对调试和手动调试非常有用!
    --文件:fact.lua
    --函数:根据提示在命令提示符输入一个数字,然后计算这个函数的阶乘!
    
    function fact(n)
         if n==0 then
               return 1
         else
               return n * fact(n-1)
         end   
    end   
    
    print("enter a number:")
    a=io.read("*number") 
  • 另外一种运行程序块的方式是运用函数dofile(),运执行这个函数会立即执行指定的文件!
    --文件:lib1.lua
    --函数1:求两个数的平方和的平方根
    --函数2:求一个数的两倍
    
    function norm(x,y)
        return (x^2+y^2)^0.5
    end
    
    function twice(x)
        return 2*x
    end

    进入lua命令提示符以后,执行dofile("c:\\demo\\lib1.lua")语句,加载lib1.lua这个脚本文件,相当于加载了一个lua函数库。然后输入n=norm(3.14,1.0),相当于是给一个变量n赋了值,然后打印这个变量:print(n),会返回这两个数字计算之后的结果:3.2953907203851。测试一下第二个函数,输入:print(twice(5)),会返回10。dofile()函数对于调试代码是非常有用的,可以一遍打开代码编辑器,一遍打开cmd命令提示窗口,边编辑,边利用dofile()函数调试打印新代码。

2、lua语法基础:词法规范

  • lua中的标识符可以是由任意的字母数字下划线构成的字符串;
  • lua中的标识符不能以数字开头!
  • lua中应该避免使用一个下划线(_)开头并跟着一个或多个大写字母的字符串做标识符,例如:_VERSION,lua会将这类标识符保留用作特殊用途。
  • lua中的保留字:and、break、do、else、elseif、end、false、for、function、id、in、local、nil、not、or、repeat、return、then、true、until、while。保留字不能做为标识符。
  • lua是区分大小写的,比如 and 是保留字,不能做为标识符,但是 And 或 AND 是可以做为标识符的,它们与小写的and不同。
  • lua中的注释
    --lua中的注释分为两种:
    
    1.对单行进行注释
    使用--对单行进行注释,需要注释的内容写在--的后面
    
    2.对程序块进行注释
    使用--[[]] 对语句块进行注释,
    也可以写成--[[和--]]的形式
    
    --[[
        要注释的内容
        要注释的内容     
    --]]

     

3、lua语法基础:全局变量

  • 通常我们没有必要去删除一个全局变量,我们直接给一个变量赋值为nil,就相当于删除了这个全局变量!
  • 如果一个变量只有较短的生命周期,我们可以选用局部变量。

4、lua语法基础:解释器程序

  • 解释器是一个小型的程序,我们可以在里面直接使用lua。
    --lua [选项参数] [脚本[参数]]
    
    --参数-e,加了-e参数我们就可以直接在命令行中直接输入代码,例如
    lua -e "print('Hello Lua')"
    
    --参数-l,表示用来加载库文件
    
    --参数-i,表示会运行完其他命令行参数后再进入lua命令提示符交互模式,例如
    lua -i -l a -e "x=10"
    --说明:会首先加载库文件a,然后再执行赋值语句x=10,最后进入交互模式的命令提示符。
    
    --设置一个_ PROMPT的全局变量,可以修改交互模式下的lua命令提示符
    lua -i -e "_PROMPT='lua>'"
    --说明:lua交互模式下的命令提示符会由原来的>号变为我们指定的lua>
    
    --在lua命令提示符中除了print()可以打印值之外,还可以使用=号来打印显示自己指定的值,例如
    =math.sin(3)
    --说明:计算sin(3)的值,返回值为:0.14112000805987。可以用这种方式将lua当做一个计算器来用。

5、lua语法基础:类型与值

  • nil(空)
  • boolean(布尔)
  • number(数字)
  • string(字符串)
  • table(表)
  • function(函数)
  • userdata(自定义类型)
  • thread(线程)
    --函数:type() 可以返回指定内容的变量类型
    
    print(type("Hello"))
    -->string
    
    print(type(3.5))
    -->number
    
    a=print
    print(type(a))
    -->function
    
    print(type(b))
    -->nil
    --说明:没有初始化的变量,默认值类型为nil
    
    b=10
    print(type(b))
    -->number
    
    b=print
    print(type(b))
    -->function
    --说明:给变量b重新赋值后,它的类型变为了function。变量可以包含任何类型的值

     

  • 关于nil,主要用去区别其它任何值,一个全局变量在赋值之前它的默认值就是nil,同样将一个全局变量赋值为nil,就相当于删除了这个全局变量。
  • 关于boolean,有两个值true和false。但是在lua中boolean值不是一个条件值的唯一表达方式,在lua中任何值都可以表示一个条件,lua将false和nil视为假,除此之外的其他值都视为真!(lua中将数字0和空字符串都视为真)。
  • 关于number,用于表示实数(即双精度浮点数),lua没有整数类型。但是通过重新编译,lua也可以使用其它类型来表示数字,例如长整形long或单精度浮点数float。书写一个数值常量的时候,可以使用普通的写法,也可以使用科学计数法,例如:a=54 和 b=3.2e2(表示3.2乘以10的2次方,等于320)。
  • 关于string,lua字符串是不可变的值,如果要修改字符串的值可以新建一个字符串变量;lua字符串可以表示任何的数字。字符串需要使用双引号来包裹,如果字符串中本身就存在引号,可以将字符串本身的引号写为单引号,用于包裹的使用双引号。也可以使用反斜杠表示转义字符来表示字符串本身的引号;lua中的转义序列:\a(表示)、\b(表示退格)、\f(表示提供表格)、\n(表示换行)、\'(显示单引号本身)、\"(显示双引号本身)、\r(表示回车)、\\(表示反斜杠本身)、\t(表示水平tab)。\跟三位十进制数,可以将数值转换为对应字符,例如:\065)(表示字符A)。使用一对匹配的双方括号[[   ]],可以定义一个多行的字符串序列,可以保留字符串中的换行!lua中会自动将数字字符串转换为数值,如:print("10"+1);还可以使用两点(..)将字符串进行拼接。在lua中可以在字符串前面添加一个#(井号,称为长度操作符),表示这个字符串的长度。
  • 关于table,它是一种关联数组。table没有大小,我们可以动态的添加数字元素。在lua中table既不是值也不是变量,而是对象。在lua中也不需要声明一个table,它是通过构造表达式来创建的。例如:a={},a就是一个table,a[k]=10,表示:key=x,value=10。a[20]="great",表示:key=20,value="great"。

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
OpenResty + Lua + Kafka 实现日志收集系统以及部署过程中遇到的坑 ...发布时间:2022-07-22
下一篇:
ngx_lua模块(用于pv统计)发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap