Lua语法
数据类型
Lua是一个动态类型语言,一个变量可以存储任何类型的值。编写redis脚本会用到的类型
类型名 | 取值 |
空(nil) | 空类型只包含一个值,即nil。nil表示空,所有没有赋值的变量或表的字段都是nil |
布尔(boolean) | 布尔类型包含true和false |
数字(number) | 整数和浮点数都是使用数字类型存储,如1、0.23、3.5e20等 |
字符串(string) | 字符串类型可以存储字符串,且与redis的键值一样都是二进制安全的。字符串可以使用单引号或双引号表示,两个符号是相同的,比如'a'和"a",字符串中可以包含转义字符,如\n,\r等 |
表(table) | 表类型是Lua语言中唯一的数据结构,既可以当数组有可以当字典,十分灵活 |
函数(function) | 函数在Lua中是一等值(first-class-value),可以存储在变量中、作为函数的参数或返回结果 |
变量
Lua的变量分为全局变量和局部变量。全局变量无需声明就可以直接使用,默认为nil
a=1 --为全局变量赋值
print(b) --无需声明即可使用,默认是nil
a = nil --删除全局变量a的方法是将其赋值为nil。全局变量没有声明和未声明之分,只有非nil和nil区别
在redis脚本中不能使用全局变量,只允许使用局部变量以防止脚本之间的相互影响,声明局部变量的方法为local变量名
local c --声明一个局部变量c,默认值是nil
local d =1 --声明局部变量并赋值1
local e,f --同时声明多个局部变量
变量名必须是非数字开头,只能包含字母、数字和下划线,区分大小写。变量名不能和Lua的保留关键字相同,保留关键字如下:
and break do else elseif
end false for function if
in local nil not or
repeat return then true until while
局部变量的作用域为从声明开始到所在层的语句块末尾,比如
local x =10
if true then
local x = x+1
print(x)
do
local x = x+1
print(x)
end
print(x)
end
print(x)
依次输出:
11 12 11 10
注释
单行注释以--开始,到行尾结束,一般习惯在--后面跟上一个空格
多行注释以--[[开始,到]]结束
赋值
Lua支持多重赋值,比如:
local a,b = 1,2
local c,d = 1,2,2 -- c的值是1,d的值是2,3被舍弃了
local e,f = 1 -- e的值是1,f的值是nil
在执行多重赋值是,lua会先计算所有表达式的值,比如
local a