Lua简单的安装和基本语法

Lua

Lua 是一个小巧的脚本语言。它是巴西里约热内卢天主教大学三人所组成的研究小组于1993年开发的。 其设计目的是为了通过灵活嵌入应用程序中从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。Lua 有一个同时进行的JIT项目,提供在特定平台上的即时编译功能。

简单来说:
Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

lua 语言具有以下特性:

  • 支持面向过程(procedure-oriented)编程和函数式编程(functional programming);
  • 自动内存管理;只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象;
  • 语言内置模式匹配;闭包(closure);函数也可以看做一个值;提供多线程(协同进程,并非操作系统所支持的线程)支持;
  • 通过闭包和table可以很方便地支持面向对象编程所需要的一些关键机制,比如数据抽象,虚函数,继承和重载等。

应用场景:

  • 游戏开发
  • 独立应用脚本
  • Web 应用脚本
  • 扩展和数据库插件如:MySQL Proxy 和 MySQL WorkBench
  • 安全系统,如入侵检测系统
  • redis中嵌套调用实现类似事务的功能
  • web容器中应用处理一些过滤 缓存等等的逻辑,例如nginx。

安装

  1. 安装依赖库

    yum install ‐y gcc
    
    yum install libtermcap‐devel ncurses‐devel libevent‐devel readline‐devel
    
  2. http://www.lua.org/ftp/ 选择合适版本进行下载,上传到Linux服务器

  3. 解压

   tar zxf lua-5.4.2.tar.gz
  1. 进入lua目录并安装

    cd lua-5.4.2/
    
    make linux
    
    make install
    
  2. 启动lua

    lua
    

    或者

    lua -i
    

    进入了lua界面…


lua程序

lua有交互式编程和脚本式编程。

  • 交互式编程

    输入lua启动lua,直接进行交互输入,输入一句,输出一句。

  • 脚本式编程

    ​ 创建lua脚本 hello.lua

    print("hello world")
    if(0) then
    	print("0 为 true")
    else
    	print("0 不为true")
    end
    

    执行lua脚本

    lua hello.lua
    

    输出结果:

    [root@instance lua-script]# lua hello.lua
    hello world
    0 为 true
    

1.数据类型及变量

Lua 是动态类型语言,变量**不用类型定义**(和python类似),只需要为变量赋值。 值可以存储在变量中,作为参数传递或结果返回。
Lua 中有 8 个基本类型分别为:nil、boolean、number、string、userdata、function、thread 和 table。

(可以使用函数type()查看该值类型)

  • nil

    只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。

    未定义的值,直接查询,输出nil

    > c
    nil
    
  • boolean

    包含两个值:false和true。

    a=true
    
  • number

    表示双精度类型的实浮点数

    a=10
    
  • string

    字符串由一对双引号或单引号来表示

    s="string1"
    
  • function

    由 C 或 Lua 编写的函数

    function fun()
        print("aaa")
    end
    
  • userdata

    表示任意存储在变量中的C数据结构.userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用。

  • thread

    表示执行的独立线路,用于执行协同程序.

    在 Lua 里,最主要的线程是协同程序(coroutine)。它跟线程(thread)差不多,拥有自己独立的栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西。

    线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起(suspend)时才会暂停。

  • table
    Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字、字符串或表类型。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。

    -- 创建一个空的 table
    local tbl1 = {}
     
    -- 直接初始表
    local tbl2 = {"apple", "pear", "orange", "grape"}
    
    -- 单独赋值
    table[1]=99
    --移除定义
    table[1]=nil
    
    
    array = {"Lua", "Tutorial"}
    
    for i= 0, 2 do
       print(array[i])
    end
    

变量分为全局变量局部变量

  • 全局变量

    a=3  --一般都是定义的全局变量
    
  • 局部变量

    > local a=3
    > a
    nil
    

    函数也有局部的

    loacl function max()
    end
    

2.注释

  • 单行注释
-- 
  • 多行注释
--[
这里是注释
还是注释
--]

3.流程控制

  • if

    ‐‐[ 0true ]
    if(0) then
    print("0 为 true")
    else
    print("0 不为true")
    end
    
  • while

    -- 谨慎输入
    while( true )
    do
       print("循环将永远执行下去")
    end
    
  • for

    for a= 1,10
    do
       print(a)
    end
    
  • break

    --[ 定义变量 --]
    a = 10
    --[ while 循环 --]
    while( a < 20 )
    do
       print("a 的值为:", a)
       a=a+1
       if( a > 15)
       then
            
          --[ 使用 break 语句终止循环 --]
          break
            
       end
    end
    
  • goto

    编写lua脚本

    vi hello.lua

    local a = 1
    ::label:: print("--- goto label ---")
    
    a = a+1
    if a < 3 then
        goto label   -- a 小于 3 的时候跳转到标签 label
    end
    

    执行lua脚本,结果:

    [root@instance lua-script]# lua hello.lua
    --- goto label ---
    --- goto label ---
    

    有了 goto,我们可以实现 continue 的功能:

    for i=1, 3 do
        if i <= 2 then
            print(i, "yes continue")
            goto continue
        end
        print(i, " no continue")
        ::continue::
        print([[i'm end]])
    end
    

    执行结果:

    [root@instance-c9m0dcrw lua-script]# lua hello.lua
    1	yes continue
    i'm end
    2	yes continue
    i'm end
    3	 no continue
    i'm end
    

    4.函数function

    --[[ 函数返回两个值的最大值 --]]
    function max(num1, num2)
    
       if (num1 > num2) then
          result = num1;
       else
          result = num2;
       end
    
       return result;
    end
    -- 调用函数
    print("两值比较最大值为 ",max(10,4))
    print("两值比较最大值为 ",max(5,6))
    

    结果:

    两值比较最大值为     10
    两值比较最大值为     6
    

5.模块

moduel.lua脚本

-- 文件名为 module.lua
-- 定义一个名为 module 的模块
module = {}
 
-- 定义一个常量
module.constant = "这是一个常量"
 
-- 定义一个函数
function module.func1()
    io.write("这是一个公有函数!\n")
end
 
local function func2()
    print("这是一个私有函数!")
end
 
function module.func3()
    func2()
end
 
return module

test_module.lua 文件

-- test_module.lua 文件
-- module 模块为上文提到到 module.lua
require("module")

--module 模块的常量
print(module.constant)
--module 模块的v
module.func3()

n.其他

 ::label::  		 是标签
 ..					表示拼接,例如 print("a是"..a)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值