目录

  • Lua
  • lua的安装
  • 入门程序
  • lua的基本语法
  • 注解
  • 定义变量
  • Lua中的数据类型
  • 流程控制
  • 循环
  • 函数
  • 模块


Lua

lua的安装

curl -R -O http://www.lua.org/ftp/lua-5.3.5 tar.gz
tar zxf lua-5.3.5 tar.gz
cd lua-5.3.5
make linux test

如果出现错误需要安装lua相关依赖库的支持

lua独立运行 如何运行lua_lua独立运行

yum install libtermcap-devel ncurses-deve1 libevent-deve1 readline-deve1

测试lua是否安装成功

lua

入门程序

创建一个hello.lua文件

vi hello.lua

lua独立运行 如何运行lua_linux_02

执行lua程序

lua hello.lua

lua独立运行 如何运行lua_后端_03

lua独立运行 如何运行lua_脚本语言_04

还可以进入Lua控制台去执行

lua 或 lua -i 都是可以的

lua独立运行 如何运行lua_lua_05

编程模式

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

交互式编程就是直接输入语法,就能执行。

脚本式编程需要编写脚本,然后再执行命令 执行脚本才可以。

一般采用脚本式编程。(例如:编写一个hello.lua的文件,输入文件内容,并执行lua hell.lua即可)

1、交互式编程

Lua 提供了交互式编程模式。我们可以在命令行中输入程序并立即查看效果。

Lua 交互式编程模式可以通过命令 lua -i 或 lua 来启用:

lua -i

如下图:

lua独立运行 如何运行lua_lua独立运行_06

2、脚本式编程

我们可以将 Lua 程序代码保持到一个以 lua 结尾的文件,并执行,该模式称为脚本式编程,例如上面入门程序中将lua语法写到hello.lua文件中。

lua的基本语法

注解

一行注释:两个减号是单行注释:

--

多行注释

--[[
 多行注释
 多行注释
--]]

定义变量

默认是全局变量

-- 全局变量赋值
a=1
-- 局部变量赋值
local b=2

如果变量没有初始化:则它的值为nil这个和java中的null不一样

lua独立运行 如何运行lua_lua_07

Lua中的数据类型

Lua是动态类型语言,变量不用类型定义,只需要为变量赋值。值可以存储在变量中,作为参数传递或结果返回。

Lua中有8个基本类型分别为:nil、boolean、number、string、userdata、function、thread和table

数据类型

描述

nil

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

boolean

包含两个值:false和true

number

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

string

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

userdata

表示任意存储在变量中的C数据结构

function

由 C 或 Lua 编写的函数

thread

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

table

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

实例:

print(type("Hello world"))      --> string
print(type(10.4*3))             --> number
print(type(print))              --> function
print(type(type))               --> function
print(type(true))               --> boolean
print(type(nil))                --> nil

type:函数,输出对象的类型

流程控制

(1)if语句

Lua if 语句由一个布尔表达式作为条件判断,其后紧跟其他语句组成。

语法:

if(布尔表达式)
then
    --[[ 在布尔表达式为 true 时执行的语句 --]]
end

实例:

lua独立运行 如何运行lua_脚本语言_08

(2)if…else语句

Lua if 语句可以与 else 语句搭配使用,在if条件表达式为 false 时执行 else 语句代码块

语法:

if(布尔表达式)
then
   --[[ 布尔表达为 true 时执行该语句块 --]]
else
   --[[ 布尔表达为 true 时执行该语句块 --]]
end

实例:

lua独立运行 如何运行lua_linux_09

循环

(1)while循环[满足条件就循环]

Lua 编程语言中 while 循环语句在判断条件为 true 时会重复执行循环体语句。

语法:

while(codition)
do
    statements
end

实例:

a=10
while(a<20)
do
    print("a 的值为:",a)
    a = a+1
end

lua独立运行 如何运行lua_linux_10

(2)for循环

Lua 编程语言中 for 循环语句可以重复执行指定语句,重复次数可在for语句中控制。

语法:1->10 1:exp1,10:exp2 ,2:exp3:递增的数量

for var=exp1,exp2,exp3
do
    <执行体>
end

实例:

for i=1,10,2
do
    print(i)
end

lua独立运行 如何运行lua_lua_11

(3)repeat…until语句[满足条件结束]

Lua 编程语言中 repeat…until 循环语句不同于 for 和 while 循环,for 和 while 循环的条件语句在当前循环执行开始时判断,而 repeat…until 循环的条件语句是在当前循环结束后判断

语法:

repeat
    statements
until(condition)

实例:

lua独立运行 如何运行lua_后端_12

函数

Lua 中也可以定义函数,类似于java中的方法。例如:

--[[ 函数返回两个值的最大值 --]]
function max(num1,num2)
    if(num1>num2)
    then
        result=num1
    else
        result=num2
    end
    return result
end
-- 调用函数
print(max(11,19))

lua独立运行 如何运行lua_lua_13

… :表示拼接

lua独立运行 如何运行lua_脚本语言_14

table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组、字典等。

Lua也是通过table来解决模块(module)、包(package)和对象(Object)的。

实例:

-- 初始化表
mytable = {}

-- 指定值
mytable[1] = "Lua"

-- 移除引用
mytable = nil

lua独立运行 如何运行lua_后端_15

模块

(1)模块定义

模块类似于一个封装库,从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度。

创建一个文件叫module.lua,在module.lua中创建一个独立的模块,代码如下:

-- 文件名为 module.lua
-- 定义一个名为 module 的模块
module = {}

-- 定义一个常量
module.constant = "这是一个常量"

-- 定义一个函数
function module.func1()
    print("这是一个公有函数")
end
	
local function func2()
    print("这是一个私有函数!")
end

function module.func3()
    func2()
end

return module

由以上可知,模块的结构就是一个 table 的结构,因此可以像操作调用 table 里的元素那样来操作调用模块里的常量或函数。

上面的 func2 声明为程序块的局部变量,即表示一个私有函数,因此是不能从外部访问模块里的这个私有函数,必须通过模块里的公有函数来调用.

定义一个module.lua

lua独立运行 如何运行lua_linux_16

(2)require 函数

require 用于 引入其他的模块,类似于java中的类要引用别的类的效果。

用法:

require("<模块名>")
require "<模块名>"

使用上面这两种都可以

我们可以将上面定义的module模块引入使用,创建一个test_module.lua文件,代码如下:

定义一个text_module.lua去调用module.lua

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

print(module.constant)

module.func1()
module.func3()

lua独立运行 如何运行lua_lua独立运行_17

输出结果

lua独立运行 如何运行lua_lua独立运行_18