Lua 从基础入门到精通(非常详细)
目录
什么是 Lua?
Lua 环境安装
Lua基本语法
注释
数据类型
nil(空)
Boolean
number(数字)
string(字符串)
function(函数)
userdata
thread
table(表)
流程控制
运算符
循环
详解string库
Lua 模块与包
案例实战
什么是 Lua?
Lua 是一种轻量小巧的脚本语言,它用标准C语言编写并以源代码形式开放。这意味着什么呢?这意味着Lua虚拟机可以很方便的嵌入别的程序里,从而为应用程序提供灵活的扩展和定制功能。而整个Lua虚拟机编译后仅仅一百余K,经过适当的裁剪还能做到更小,十分适合嵌入式的开发。
Lua 官网:The Programming Language Lua
Lua 5.3 参考手册:Lua 5.3 参考手册 - 目录
Lua 在线调试工具:LuatOS 在线模拟 - lua在线测试
Lua 环境安装
可以不安装 Lua环境, 直接用在线调试就可以, 但也有一些学习需要安装,有需要的可以安装.
Linux 系统上安装
下载源码安装:
curl -L -R -O https://www.lua.org/ftp/lua-5.3.6.tar.gz
tar zxf lua-5.3.6.tar.gz
cd lua-5.3.6
make all test
make install
Window 系统上安装 Lua
window 下你可以使用一个叫 "SciTE" 的 IDE环 境来执行 lua 程序,下载地址为:
Github 下载地址:https://github.com/rjpcomputing/luaforwindows/releases
Google Code下载地址 : https://code.google.com/p/luaforwindows/downloads/list
双击安装后即可在该环境下编写 Lua 程序并运行。
或者
访问Lua Binaries Download 下载
把红圈内的东西,下载后解压到c:\lua(里面有dll文件重复了,取可执行文件包内的就行了)
c:\lua目录情况如下
直接运行lua53.exe 就可以
Lua基本语法
以下大部分的 Lua 语句都在Lua在线调试工具上执行。
注释
单行注释
单行注释以两个连字符 -- 开头,后面跟随的内容将被解释器忽略。
--
单行注释通常用于对代码的简短解释或标记。
多行注释
多行注释以 --[[ 开始,并以 ]] 结束,适用于需要对大段代码进行说明的情况。
--[[
多行注释
多行注释
--]]
Lua 不支持嵌套注释,这意味着在一个多行注释内不能再嵌套另一个多行注释。
数据类型
Lua 是动态类型语言,变量不要类型定义,只需要为变量赋值。 值可以存储在变量中,作为参数传递或结果返回。
Lua 中有 8 个基本类型分别为:nil、boolean、number、string、userdata、function、thread 和 table。
类型
描述
nil
这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。
boolean
包含两个值:false和true。
number
表示双精度类型的实浮点数
string
字符串由一对双引号或单引号来表示
function
由 C 或 Lua 编写的函数
userdata
表示任意存储在变量中的C数据结构
thread
表示执行的独立线路,用于执行协同程序
table
Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字、字符串或表类型。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。
nil(空)
Nil 是值 nil 的类型, 其主要特征就是和其它值区别开;通常用来表示一个有意义的值不存在时的状态。例如打印一个没有赋值的变量,便会输出一个 nil 值:
在lua在线测试 上执行命令
print(a)
运行结果
Boolean
Boolean 是 false 与 true 两个值的类型。 nil 和 false 都会导致条件判断为假; 而其它任何值都表示为真,数字 0 也是 true。
print(type(true))
print(type(false))
print(type(nil))
if false or nil then
print("至少有一个是 true")
else
print("false 和 nil 都为 false")
end
if 0 then
print("数字 0 是 true")
else
print("数字 0 为 false")
end
以上代码执行结果如下:
$ lua test.lua boolean boolean nil false 和 nil 都为 false 数字 0 是 true
number(数字)
Number 代表了整数和实数(浮点数),也就是double(双精度)类型。
print(type(2))
print(type(2.2))
print(type(0.2))
print(type(2e+1))
print(type(0.2e-1))
print(type(7.8263692594256e-06))
以上代码执行结果:
number
number
number
number
number
number
string(字符串)
字符串(即string),就是一串文本数据,可以存储你要的文本。
Lua 语言中字符串可以使用以下三种方式来表示:
单引号间的一串字符
双引号间的一串字符
[[和]]间的一串字符
string1 = "this is string1"
string2 = 'this is string2'
str4 = [[使用双括号时,甚至能包含换行数据
换行了
最后一行]]
print(string1)
print(string2)
print(str4)
以上代码执行结果:
this is string1 this is string2 使用双括号时,甚至能包含换行数据 换行了 最后一行
function(函数)
在Lua中,函数是对语句和表达式进行抽象的主要方法。既可以用来处理一些特殊的工作,也可以用来计算一些值。
Lua 提供了许多的内建函数,你可以很方便的在程序中调用它们,如print()函数可以将传入的参数打印在控制台上。
Lua 函数主要有两种用途:
1.完成指定的任务,这种情况下函数作为调用语句使用;
2.计算并返回值,这种情况下函数作为赋值语句的表达式使用。
函数定义
Lua 编程语言函数定义格式如下:
optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)
function_body
return result_params_comma_separated
end
解析:
optional_function_scope: 该参数是可选的指定函数是全局函数还是局部函数,未设置该参数默认为全局函数,如果你需要设置函数为局部函数需要使用关键字 local,通常不设置。
function_name: 指定函数名称。
argument1, argument2, argument3..., argumentn: 函数参数,多个参数以逗号隔开,函数也可以不带参数。
function_body: 函数体