zoukankan      html  css  js  c++  java
  • Lua入门教程

    什么是Lua

      Lua 是一个小巧的脚本语言。是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发。 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。Lua 有一个同时进行的GIT项目,提供在特定平台上的即时编译功能。
      Lua脚本可以很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,ini等文件格式,并且更容易理解和维护。 Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。 一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择

    Lua里的注释

    单行注释

    使用两个减号表示注释的开始,一直延续到行末位置。相当于C语言中的"//"。

    1
    2
    --这里是一行注释
    print("Hello Lanou")

    多行注释

    使用"--[["表示注释开始,使用"]]"表示注释结束。这种注释相当于C语言中的"/*"和"*/"。

    1
    2
    3
    --[[这里是第一行注释
    这里是第二行注释]]
    pring("Hello Lanou")

    Lua里的变量

    在默认情况下,Lua里认为所有的变量都是全局变量。假如需要定义局部变量,则在声明变量时需要使用local说明。

    并且在赋值的时候,允许同时给多个变量进行赋值。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    -- i是一个局部变量
    local i = 1
     
    -- name是一个全局变量
    name = "Lewis"
     
    -- age,height都是局部变量
    local age,height = 34,183.5
     
    -- gender,company都是全局变量
    gender,company = "男","蓝鸥"

      

    Lua里的运算符

    算数运算符

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    -- +(加法)
    print(1 2)
     
    -- -(减法)
    print(1 2)
     
    -- *(乘法)
    print(1 2)
     
    -- /(除法)
    print(1 2)
     
    -- ^(乘方)
    print(1 2)

    比较运算符

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    -- <(小于)
    print(1 2)
     
    -- >(大于)
    print(1 2)
     
    -- <=(小于等于)
    print(1 <= 2)
     
    -- >=(大于等于)
    print(1 2)
     
    -- ==(等于等于)
    print(1 == 2)
     
    -- ~=(不等于)
    print(1 ~= 2)

    逻辑运算符

    在使用逻辑运算符时与C语言差别很大。

    在Lua语言里,只有false和nil才为false,其他任何数据都是true,0也是true!!!

    and 和 or 的运算结果不是true和false,而是和他的两个操作数相关。

    a and b:如果a为false,则返回a;否则,返回b;

    a or   b:如果a为true,则返回a;否则,返回b;

    1
    2
    3
    4
    5
    6
    7
    8
    -- and(与)
    print(1 and 2)
     
    -- or(或)
    print(1 or 2)
     
    -- not(非)
    print(1 not 2)

    通过Lua里的这种特性,可以模拟C语言中的 ?:运算符

    例如:C语言中的 x=a?b : c,在Lua中,可以写成 x = a and b or c。

    Lua里的数据类型

    关键字 描述
    nil 空值,所有没有使用过的变量都是nil;nil既是值,又是数据类型
    boolean 布尔类型,只有两个有效的值:true和false
    number 数值类型,在Lua里,相当于C语言里的double
    string 字符串,如果愿意的话,字符串是可以包含""字符的
    table 关系类型,这个类型的功能比较强大
    function 函数类型,可以由函数类型来声明变量
    userdata 这个类型专门与Lua的宿主打交道。宿主通常是由c语言和c++语言开发的,在这种情况下,userdata可以是宿主的任何类型,常用的是结构体和指针类型
    thread 线程类型,在Lua里没有真正的线程。

    Lua里的代码块

    在C语言中代码块是有"{"和"}"括起来的,在Lua中,使用do和end关键字括起来的。

    1
    2
    3
    do
    print("Hello")
    end

    Lua里的关系类型

    关系类型,是一个非常强大的类型。这个类型类似于C++语言里的映射结构,类似于PHP语言里的array对象,类似于OC里的NSDictionary对象。

    在Lua里的关系类型(Table)定义很简单,它主要特征是使用"{"和"}"来括起来一系列的元素。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    --声明一个关系类型的全局变量table
    table = {}
     
    --赋值关系变量table索引为0时的值是34
    table[0] = 34
     
    --同时也可以写成 table.name = "Lewis"
    table["name"] = "Lewis"
    table.gender = "男"
     
    --同样也可以将索引为"son"的对象写成另外一个表格
    table["son"] = {name = "DD",gender = "男"}
     
    --访问对象时就可以使用
    print(table.son.name)

    同样也可以如下声明

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    -- 声明关系变量table
    table = {
        10,--相当于[1] = 10
        [100] = 40,
     
     
        lewis = { -- 同样也可以写成 ["lewis"] =
            age = 34, -- 同样可以写成 ["age"] = 34
            gender = "male",
        },
     
        20, --相当于[2] = 20
    }
     
    print(table[2])

    Lua里的函数

    在Lua中,函数的定义非常简单。不过要注意的一点就是,return语句一定要写在end之前。假如我们非要在函数中加一个return语句,那就应该写成

    1
    2
    3
    4
    do
    --return语句一定要在一个代码块结束前
    return
    end

    函数举例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    -- 声明函数类型变量sum
    function sum( v1,v2 )
        -- 函数体
        return v1 + v2
    end
     
    -- 同样函数变量也可以如下声明
    mul = function (v1,v2 )
        -- 函数体
        return v1 * v2
    end
     
    --调用第一个函数sum
    print(sum(2,3))
    --调用第二个函数mul
    print(mul(3,4))

    Lua里的类

    前边曾经说过,表类型可以拥有任意类型的值,包括函数!

    因此,我们就可以创建一个具有函数变量的表。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    lewis = {
        age = 34,
        work = function (self,message)
            -- 函数体
            self.age = self.age + 1;
            print(self.age .. message)
        end
    }
     
    print(lewis.age)
    lewis.work(lewis,"上班")
     
    --也可以如下调用方法
    lewis:work("上班")

    结束

    就像C语言一样,Lua里提供了很多的标准函数库来增强语言的功能。使用这些函数,可以很方便的操作各种数据类型。

    可以参考《Programming in Lua》这本书。

  • 相关阅读:
    ubuntu18【合上盖子不休眠】
    linux和windows双系统开机显示 Minimal BASHlike line editingis supported xxxxxx
    Linux下opera不支持h5播放器的解决方法
    linux openjdk路径
    Linux安装redis tar.gz
    dpkg 安装deb文件
    Linux破解Navicat15
    kali设置grub主题
    kali安装git tar.gz
    kali 安装 teamviewer 显示检测到wayland
  • 原文地址:https://www.cnblogs.com/smallfa/p/13992717.html
Copyright © 2011-2022 走看看