Lua 学习笔记

目录

一、Lua 简介

1.1 概述

1.2 特性

1.3 应用场景

二、Lua 安装

三、Lua 语言使用

3.1 Lua 基本语法

3.1.1 交互式编程

3.1.2 脚本式编程

3.2 注释

3.3 变量

3.4 类型

3.4.1 基本类型

3.4.2 查看类型

3.4.3 table 类型使用

3.5 流程判断

3.5.1 if ..else..

3.5.2 whie..do 循环

3.5.3 for 循环

3.5.4 函数定义和使用

3.5.5 拼接

3.5.6 模块使用


一、Lua 简介

1.1 概述

Lua 是一个小巧的脚本语言,用标准 C 语言编写并以源代码形式开发,其设计目的是通过灵活嵌入应用程序中从而为应用程序提供灵活的扩展和定制功能,在几乎所有操作系统和平台上都可以编译和运行。但是由于 Lua 并没有提供强大的库,所以不适合作为开发独立应用程序的语言。

 

1.2 特性

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

 

1.3 应用场景

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

 

二、Lua 安装

# 下载 lua 压缩包
curl -R -O http://www.lua.org/ftp/lua-5.3.5.tar.gz

# 解压
tar -zxvf lua-5.3.5.tar.gz

# 编译
cd lua-5.3.5
make linux test

安装成功:

  Lua 学习笔记_第1张图片

若安装时出现如下错误:

表明需要安装 lua 相关的依赖库支持:

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

测试是否安装成功:

# 测试是否安装成功
lua

  

 

三、Lua 语言使用

3.1 Lua 基本语法

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

3.1.1 交互式编程

交互式编程即直接输入语法就能执行

# 进入 lua 命令控制台
lua -i

# 交互
如: print("hello")

  Lua 学习笔记_第2张图片

 

3.1.2 脚本式编程

脚本式编程即编写出 *.lua 文件,并执行这个文件

# 创建文件
vim test.lua

# 加入代码
print("PHP是世界上最伟大的语言!")

# 运行
lua test.lua

  

 

3.2 注释

# 单行注释
-- print("PHP是世界上最好的语言")

# 多行注释
--[[
    print("PHP是世界上最好的语言")
    print("PHP是世界上最好的语言2")
]]--

3.3 变量

# 全局变量
a = 1

# 局部变量
local b = 100

  Lua 学习笔记_第3张图片

 

3.4 类型

3.4.1 基本类型

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

数据类型 描述
nil 表示一个无效值,在条件表达式中等同于false
boolean 布尔值,true 或 false
number 表示双精度类型的浮点数
string 字符串
function 由 C 或 Lua 编写的函数
userdata 表示任意存储在变量中的 C 结构数据
thread 表示执行的独立线路,用于执行协同程序
table  Lua 中的表,实际是一个关联数组 Array,数组的索引可以是数字、字符串或表类型。在 Lua 中,table 的创建是通过“构造表达式”来完成的,最简单的构造表达式是{},用于创建一个空表

3.4.2 查看类型

# 使用 type 函数,输出对象类型
print(type(xxxx))

3.4.3 table 类型使用

# 创建数组
mytable={}
mytable={1,2,3,4,5}

# 使用数组
mytable[1]=10
print(mytable[1])

# 清空数组
mytable=nil

 

3.5 流程判断

3.5.1 if ..else..

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

  Lua 学习笔记_第4张图片

 

3.5.2 whie..do 循环

while(condition)
do
    --[要执行的语句]--
end

  Lua 学习笔记_第5张图片

 

3.5.3 for 循环

for var=parm1,parm2,step do  
    <执行体>  
end 

-- var: 起始变量
-- parm1:给起始变量的赋值
-- parm2:条件,可以是函数
-- step: 步长,可不写

  Lua 学习笔记_第6张图片

 

3.5.4 函数定义和使用

# 定义函数
function 【xxx 函数名】 (xxx参数)
    【函数语句】
    return 【返回值】
end

# 调用
【xxx 函数名】(参数)

  Lua 学习笔记_第7张图片

 

3.5.5 拼接

Lua 使用 .. 进行拼接

Lua 学习笔记_第8张图片

 

3.5.6 模块使用

创建模块的文件

vim module1.lua

文件内容为:

-- 定义一个模块
module={}
-- 给这个模块增加一个变量
module.username="小王"

-- 定义一个全局方法
function module.func1()
        print("func1")
end

-- 定义局部方法
local function func2()
        print("func2")
end

-- 定义一个全局方法,调用func2
function module.func3()
        func2()
end

return module

创建正式入口,引入 module1.lua 这个模块

vim demo.lua
-- 引入 module1.lua 脚本:require(【文件名】)
require("module1")

--输出module的参数
print(module.username)
module.func1()
module.func3()

测试:

lua demo.lua

  Lua 学习笔记_第9张图片

 

 

你可能感兴趣的:(Lua)