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

  1. a = 10; -- 全局变量
  2. function dec()
  3. a = 20; -- 全局变量
  4. local b = 5; -- 局部变量
  5. end
  6. dec();
  7. print(a); -- 输出20
  8. print(b); -- 输出nil
  9. --在终端执行命令
  10. $ lua index.lua

image.png

Boolean(布尔)

boolean只有两个值:false、true,Lua把nil看作false,其他都为true,数字0也为true

String(字符串)

声明字符串变量

  1. string1 = '我是字符串1'
  2. string2 = "我是字符串2"
  3. string3 = [[
  4. 我也是字符串,
  5. 但是我是一大块字符串。
  6. ]]

连接两个字符串

  1. print("a" .. "b") -- 输出:ab
  2. print(123 .. 456) -- 输出:123456
  3. print(#"abc") -- 计算字符串长度,输出:3
  4. len = "aaa"
  5. print(#len) -- 输出:3

字符串的操作

  1. string.upper(str)

字符串全部转为大写

  1. string.lower(str)

字符串全部转为小写

  1. string.gsub(main, find, replace, num)

main为要操作的字符串
find为被替换的字符串
replace为要替换成的字符串
num替换次数,默认全部替换

  1. string.find(str, substr, [init, [end]])

寻找字符串str中,substr出现的位置,开始位置及结束位置,不存在则返回nil

  1. string.reverse(str)

字符串反转

  1. string.format(…)

返回一个格式化字符串

  1. string.char(arg)

将整数转换为字符串
string.char(97, 98, 99) — 返回abc

  1. string.byte(str[,init])

将字符串转换为整数,默认转换第一个字符
string.byte(“ABCD”) — 返回65
string.byte(“ABCD”, 4) — 返回68

  1. string.len(“abc”)

返回字符串长度

  1. string.rep(str, n)

重复指定字符串N次
string.rep(“abc”, 2) — 返回abcabc

  1. string.

    Table(表/数组)

    概念

    数组,就是相同数据类型的元素,按一定顺序排列的集合,可以是一维数组也可以是多维数组。
    可以使用任意类型的值来做lua的数组索引,但这个值不能是nil

    表定义

    一定要注意,Lua的数组索引下标是从1开始的

一维数组是最简单的数组,其逻辑结构是线性表。一维数组可以用for循环出数组中的元素。

  1. -- 初始化表
  2. array = {}
  3. -- 指定值
  4. array[1] = "A"
  5. array[2] = 2
  6. -- 循环输出数组中的值
  7. for i = 1, 2 do
  8. print(array[i])
  9. end
  10. -- 解除引用,lua垃圾回收会释放内存
  11. array = nil

表相关方法

  1. table.concat(table[, sep[, start[, end]]])

concat是concatenate(连接)的缩写,用于拼接数组元素
table:要进行拼接的表
sep:用什么字符串进行拼接
start:从第几个元素开始拼接
end:到第几个元素结束

  1. table.insert(table, [pos ,] value)

在table指定位置(pos)插入value,如果不指定pos,则默认插在数组末尾

  1. table.remove(table[, pos])

从table中删除指定位置(pos)元素,如不指定,从末尾删除,删除后其后的元素前移。

  1. 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)
示例代码及结果:
image.png

Function(函数)

Lua中,函数可以返回多个值

  1. function test ()
  2. return a, b
  3. end

匿名函数:

  1. function test(str, func)
  2. func(str)
  3. end
  4. -- 匿名函数
  5. test("abc", function (str)
  6. -- 我是匿名函数体
  7. print(a)
  8. end);