菜鸟教程上学习Lua教程后整理的一些笔记,完整教程请点击链接
设计目的
其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
特性
- 内嵌性
- 轻量级
- 可扩展
基本语法
注释
- 单行注释
--
- 多行注释
--[[
多行注释
多行注释
--]]
标识符(变量)
一个字母 A 到 Z 或 a 到 z 或下划线 _ 开头后加上0个或多个字母,下划线,数字(0到9)。
全局变量
- 默认情况下变量为全局
- 访问一个没经过初始化的全局变量,得到为
nil
- 将变量赋值为
nil
即删除该全局变量
数据类型
数据类型 | 描述 |
---|---|
nil | 只有值nil属于该类,表示一个无效值(在条件表达式中相当于false) |
boolean | 包含两个值:false和true |
number | 表示双精度类型的实浮点数 |
string | 字符串由一对双引号或单引号来表示 |
function | 由 C 或 Lua 编写的函数 |
userdata | 表示任意存储在变量中的C数据结构 |
thread | 表示执行的独立线路,用于执行协同程序 |
table | Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字或者是字符串。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表 |
注: type函数可以测试给定变量或值的类型
变量
- Lua 变量有三种类型:全局变量、局部变量、表中的域。
- Lua 中的变量全是全局变量,那怕是语句块或是函数里,除非用 local 显式声明为局部变量。
- 局部变量的作用域为从声明位置开始到所在语句块结束
- 变量的默认值均为 nil
赋值语句
- lua可对多个变量进行赋值,例
a, b = 10, 2*x
- 赋值语句Lua会先计算右边所有的值然后再执行赋值操作,故可以这样交换变量的值,
x, y = y, x
- 当变量个数和值的个数不一致时,Lua会一直以变量个数为基础采取以下策略:
补充说明:
当变量个数 > 值的个数时,按变量个数补足nil 当变量个数 < 值的个数时,多余的值会被忽略
索引
对 table 的索引使用方括号 []
Lua循环
支持三种循环方式,有do...while
,for
,repeat...until
,另外支持break跳出当前循环
流程控制
判断的格式如下:
if(0)
then
print("0 为 true")
end
函数
通用格式如下:
optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)
function_body
return result_params_comma_separated
end
运算符
算术运算符
操作符 | 描述 |
---|---|
+ |
加法 |
- |
减法 |
* |
乘法 |
/ |
除法 |
% |
取余 |
^ |
乘幂 |
- |
负号 |
关系运算符
操作符 | 描述 |
---|---|
== |
是否相等 |
~= |
不等于 |
> |
大于 |
< |
小于 |
>= |
大于等于 |
<= |
小于等于 |
逻辑运算符
操作符 | 描述 |
---|---|
and |
与 |
or |
或 |
not |
非 |
其他运算符
操作符 | 描述 |
---|---|
.. |
字符串连接 |
# |
一元运算符,返回字符串或表的长度 |
运算符优先级
从高到低如下所示:
^
not - (unary)
* /
+ -
..
< > <= >= ~= ==
and
or
注: 除了^和..外所有的二元运算符都是左连接的
字符串
字符串操作
函数 | 作用 |
---|---|
string.upper(argument) | 字符串全部转为大写字母 |
string.lower(argument) | 字符串全部转为小写字母 |
string.gsub(mainString,findString,replaceString,num) | 在字符串中替换,mainString为要替换的字符串, findString 为被替换的字符,replaceString 要替换的字符,num 替换次数(可以忽略,则全部替换) |
string.find (str, substr, [init, [end]]) | 在一个指定的目标字符串中搜索指定的内容(第三个参数为索引),返回其具体位置。不存在则返回 nil |
数组
一维数组:
array = {"Lua", "Tutorial"}
for i= 0, 2 do
print(array[i])
end
多维数组:
-- 初始化数组
array = {}
for i=1,3 do
array[i] = {}
for j=1,3 do
array[i][j] = i*j
end
end
-- 访问数组
for i=1,3 do
for j=1,3 do
print(array[i][j])
end
end
模块与包
require函数
require的函数用来加载模块,如下:
-- test_module.lua 文件
-- module 模块为上文提到到 module.lua
require("module")
print(module.constant)
module.func3()