Lua语言新手简单入门教程
Lua是轻量小巧的脚本语言,用标准C编写,源码开放,可嵌入应用程序提供扩展。解释器仅200KB,速度最快。支持双向调用C/C++,语法简单,支持面向对象、函数式编程及自动内存管理。安装简便,代码以.lua后缀运行。
Lua 是一门很有意思的脚本语言——轻量、小巧,用标准 C 语言编写,源码完全开放。它的设计初衷很简单:嵌入到应用程序里,给宿主程序提供灵活的扩展和定制能力。
这不,游戏开发、独立应用脚本、Web 应用脚本、扩展和数据库插件、安全系统……到处都能看到它的身影。当然,很多人接触 Lua 的契机,是在 Nginx 和 Redis 里写脚本——通过在 Web 层嵌入 Lua,可以极大提升灵活性和性能。
特点
- Lua 可以轻松地被 C/C++ 代码调用,反过来也能调用 C/C++ 的函数——双向通信非常顺畅。
- 它用标准 C 编写,代码简洁优雅,几乎能在所有操作系统和平台上编译运行。
- 体积极小,语法简单,功能却很全面。一个完整的 Lua 解释器不过 200KB,在目前所有脚本引擎中,Lua 的速度是最快的。
- 与宿主语言的接口简洁明了,很容易嵌入到其他语言中使用。
特性
- 支持面向对象编程
- 轻量级
- 可扩展
- 支持函数式编程
- 自动内存管理
- 通用类型 —— table,可以实现数组、哈希表、集合、对象
- 支持闭包
- 支持多线程
- 支持交互式编程
安装
注意:安装 Lua 之前,请确保系统已经安装了 readline 和 readline-devel。如果没有,先执行 yum install -y readline readline-devel。
curl -R -O http://www.lua.org/ftp/lua-5.3.4.tar.gz tar zxf lua-5.3.4.tar.gz cd lua-5.3.4 make linux test
配置完成后,在命令行输入 lua -v 验证:
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
能看到版本信息,说明安装成功。
运行方式
和其他脚本语言一样,我们需要把 Lua 代码写在以 .lua 为后缀的文件里。运行时,直接在命令行敲 lua xx.lua 即可。
语法
4.1 数据类型
Lua 中有 8 种基本数据类型:nil、boolean、number、string、userdata、function、thread 和 table。
| 数据类型 | 说明 |
|---|---|
| nil | 表示无效值,在条件表达式中等同于 false。 |
| boolean | 布尔值,包含 true 和 false。 |
| number | 双精度浮点数。 |
| string | 字符串,用双引号或单引号括住。 |
| userdata | 任意存储在变量中的C数据结构。 |
| function | 由C或Lua编写的函数。 |
| thread | 独立线程,用于执行协同程序。 |
| table | 关联数组,索引可以是数字或字符串。 |
举个例子:
a=10 str="hello world"
Lua 不需要声明变量类型,直接用 type() 函数就能判断类型。
注意:Lua 的变量有三种:全局变量、局部变量和表中的域。默认情况下,不管在哪里声明的变量都是全局变量;用 local 修饰的才是局部变量。变量默认值是 nil。
4.2 运算符
1) 赋值运算符
str="hello".."world" -- 用 .. 连接字符串 a,b=10,15 -- a=10, b=15 c,d,e=1,2 -- c=1, d=2, e=nil
2) 算术运算符
a,b=10,15 c=a+b -- 加 d=a-b -- 减 e=a*b -- 乘 f=a/b -- 除 g=a%b -- 求余 h=a^2 -- 乘方 i=-a -- 取负
3) 关系运算符
a,b=10,15 print(a>b) -- 大于 print(a4) 逻辑运算符
print(true and false) -- 与 print(true or false) -- 或 print(not true) -- 非5) 其他运算符
| 操作符 | 说明 |
|---|---|
| .. | 连接两个字符串 |
| # | 返回字符串或表的长度,如 #"lua" |
4.3 流程控制
1) 条件判断,有三种写法:
-- if 语句
if(true)
then
print("hello")
end
-- if .. else 语句
a,b=10,15
if(a>b)
then
print(a)
else
print(b)
end
-- if 嵌套
c=20
if(c>10)
then
if(c<30)
then
print(c)
end
end
2) 循环,有四种写法:
| 类型 | 说明 |
|---|---|
| while 循环 | 条件为 true 时重复执行语句。 |
| for 循环 | 重复执行指定语句,次数在 for 中控制。可以遍历数字或泛型。 |
| repeat .. until | 重复执行直到指定条件为真为止。 |
| 循环嵌套 | 循环内嵌套多个循环语句。 |
例子:
-- while 循环 a=10 while(a>0) do print(a) a=a-1 end -- for 循环(遍历数字) for a=1,10,1 do print(a) end -- repeat .. until 循环 a=10 repeat print(a) a=a-1 until(a<1)
4.4 数组
Lua 的数组大小不固定,下标从 1 开始。
arr={"h","e","l","l","o"}
-- 用数字遍历
for index=1,#arr do
print(arr[index])
end
-- 用泛型遍历
for i,v in ipairs(arr) do
print(i,v)
end
4.5 函数
-- 案例 1 function calc(a,b,c) return a+b+c end result=calc(1,2,3) print(result) -- 案例 2:返回多个值 function getCalc(a,b,c) return a,b,c end r1,r2,r3=getCalc(1,2,3) print(r1,r2,r3)
Lua 中的函数允许一次返回多个值——这个特性在很多场景下非常方便。
4.6 table
table 是 Lua 里最重要的数据结构,有点类似 Ja va 中的 Map,或者 Ja vaScript 中的 JSON 对象。它使用关联数组,可以用任意类型的值做索引(但不能是 nil),大小也不固定。
person={}
person.name="jack"
person.age=20
print(person[1])
print(person.name)
print(person["age"])
4.7 模块和包
模块相当于一个封装好的库。从 Lua 5.1 开始,Lua 加入了标准的模块管理机制——可以把一些公共代码放在一个文件里,通过 API 接口在其他地方调用,有利于代码复用和降低耦合。
本质上,Lua 的模块就是一个由变量、函数等元素组成的 table。
比如,创建一个 module.lua 文件:
module={}
module.index=1
function module.sum(a,b)
return a+b
end
在另一个文件中引入:
-- 此处 module 是文件名 require "module" -- 此处 module 是引入模块中定义的名称 print(module.index) print(module.sum(1,2))
总结
Lua 的语法简洁、体积小、速度快,特别适合作为嵌入式脚本使用。掌握了这些基础,就可以在 Nginx、Redis 甚至游戏引擎中灵活运用了。希望这篇入门指南能帮你快速上手。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















