Lua变量标识符规则:标识符开头以字母或下划线开头,不能以数字或其他字符开头。 最好不要使用下划线或大写字母开头,因为Lua保留关键字也是这样的。
数据类型
Lua是动态类型语言,变量不要类型声明,只需要为变量赋值。值可以存储在变量中,作为参数传递或返回。
Lua中有8个基本数据类型:nil, boolean, number, string, userdata, function, thread, table.
数据类型 | 描述 |
---|---|
nil | 表示一个无效值,类似php中的null (在条件表达式中相当于false) |
boolean | false和true |
number | 双精度类型的实浮点数 |
string | 字符串,由一对双引号或单引号表示 |
function | 由C或Lua编写的函数 |
userdata | 表示任意存储在变量中的C数据结构 |
thread | 表示执行的独立线路,用于执行协同程序 |
table | Lua中的表(table),其实是一个”关联数组”(associative arrays),数组的索引可以是数字、字符串或表类型。在Lua里,table的创建是通过”构造表达式”来完成,最简单的构造表达式{},用来创建一个空表。 |
变量的定义
Lua声明变量时不需要定义数据类型,直接为变量赋值即可。
默认情况下,变量总是认为是全局的。全局变量不需要声明,给一个变量赋值后即创建了这个变量。访问一个未初始化的全局变量,不会报错,只是会得到结果:nil
a = 10; -- 全局变量
function dec()
a = 20; -- 全局变量
local b = 5; -- 局部变量
end
dec();
print(a); -- 输出20
print(b); -- 输出nil
--在终端执行命令
$ lua index.lua
Boolean(布尔)
boolean只有两个值:false、true,Lua把nil看作false,其他都为true,数字0也为true
String(字符串)
声明字符串变量
string1 = '我是字符串1'
string2 = "我是字符串2"
string3 = [[
我也是字符串,
但是我是一大块字符串。
]]
连接两个字符串
print("a" .. "b") -- 输出:ab
print(123 .. 456) -- 输出:123456
print(#"abc") -- 计算字符串长度,输出:3
len = "aaa"
print(#len) -- 输出:3
字符串的操作
- string.upper(str)
字符串全部转为大写
- string.lower(str)
字符串全部转为小写
- string.gsub(main, find, replace, num)
main为要操作的字符串
find为被替换的字符串
replace为要替换成的字符串
num替换次数,默认全部替换
- string.find(str, substr, [init, [end]])
寻找字符串str中,substr出现的位置,开始位置及结束位置,不存在则返回nil
- string.reverse(str)
字符串反转
- string.format(…)
返回一个格式化字符串
- string.char(arg)
将整数转换为字符串
string.char(97, 98, 99) — 返回abc
- string.byte(str[,init])
将字符串转换为整数,默认转换第一个字符
string.byte(“ABCD”) — 返回65
string.byte(“ABCD”, 4) — 返回68
- string.len(“abc”)
返回字符串长度
- string.rep(str, n)
重复指定字符串N次
string.rep(“abc”, 2) — 返回abcabc
- string.
Table(表/数组)
概念
数组,就是相同数据类型的元素,按一定顺序排列的集合,可以是一维数组也可以是多维数组。
可以使用任意类型的值来做lua的数组索引,但这个值不能是nil表定义
一定要注意,Lua的数组索引下标是从1开始的
一维数组是最简单的数组,其逻辑结构是线性表。一维数组可以用for循环出数组中的元素。
-- 初始化表
array = {}
-- 指定值
array[1] = "A"
array[2] = 2
-- 循环输出数组中的值
for i = 1, 2 do
print(array[i])
end
-- 解除引用,lua垃圾回收会释放内存
array = nil
表相关方法
- table.concat(table[, sep[, start[, end]]])
concat是concatenate(连接)的缩写,用于拼接数组元素
table:要进行拼接的表
sep:用什么字符串进行拼接
start:从第几个元素开始拼接
end:到第几个元素结束
- table.insert(table, [pos ,] value)
在table指定位置(pos)插入value,如果不指定pos,则默认插在数组末尾
- table.remove(table[, pos])
从table中删除指定位置(pos)元素,如不指定,从末尾删除,删除后其后的元素前移。
- table.sort(table[, comp])
按照指定函数对表进行排序。例如:
tbl = {{id: 1, name: “aaa”}, {id: 3, name: “ccc”}, {id: 2, name: “bbb”}}
table.sort(tbl, function (a, b)
— 按ID,降序排序
return a.id > b.id
— 按ID,升序排序
return a.id < b.id
end)
示例代码及结果:
Function(函数)
Lua中,函数可以返回多个值
function test ()
return a, b
end
匿名函数:
function test(str, func)
func(str)
end
-- 匿名函数
test("abc", function (str)
-- 我是匿名函数体
print(a)
end);