Nginx
编程需要用到Lua
语言,因此必须先入门Lua
的基本语法。
Lua
Lua
是一种轻量小巧的脚本语言,用标准C
语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。官网:https://www.lua.org/
Lua
经常嵌入到C
语言开发的程序中,例如游戏开发、游戏插件等。
Nginx
本身也是C
语言开发,因此也允许基于Lua
做拓展。
HelloWorld
CentOS7
默认已经安装了Lua
语言环境,所以可以直接运行Lua
代码。
1)在Linux
虚拟机的任意目录下,新建一个hello.lua
文件
2)添加下面的内容
print("Hello World!")
3)运行
任何语言必然离不开变量,而变量的声明必须先知道数据的类型。
Lua
的数据类型Lua
中支持的常见数据类型包括:
另外,Lua
提供了type()
函数来判断一个变量的数据类型:
Lua
声明变量的时候无需指定数据类型,而是用local
来声明变量为局部变量:
-- 声明字符串,可以用单引号或双引号,
local str = 'hello'
-- 字符串拼接可以使用 ..
local str2 = 'hello' .. 'world'
-- 声明数字
local num = 21
-- 声明布尔类型
local flag = true
Lua
中的table
类型既可以作为数组,又可以作为Java
中的map
来使用。数组就是特殊的table
,key
是数组角标而已:
-- 声明数组 ,key为角标的 table
local arr = {'java', 'python', 'lua'}
-- 声明table,类似java的map
local map = {name='Jack', age=21}
Lua
中的数组角标是从1开始,访问的时候与Java
中类似:
-- 访问数组,lua数组的角标从1开始
print(arr[1])
Lua
中的table
可以用key
来访问:
-- 访问table
print(map['name'])
print(map.name)
对于table
,我们可以利用for
循环来遍历。不过数组和普通table
遍历略有差异。
遍历数组:
-- 声明数组 key为索引的 table
local arr = {'java', 'python', 'lua'}
-- 遍历数组
for index,value in ipairs(arr) do
print(index, value)
end
遍历普通table
-- 声明map,也就是table
local map = {name='Jack', age=21}
-- 遍历table
for key,value in pairs(map) do
print(key, value)
end
Lua
中的条件控制和函数声明与Java
类似。
定义函数的语法:
function 函数名( argument1, argument2..., argumentn)
-- 函数体
return 返回值
end
例如,定义一个函数,用来打印数组:
function printArr(arr)
for index, value in ipairs(arr) do
print(value)
end
end
类似Java
的条件控制,例如if
、else
语法:
if(布尔表达式)
then
--[ 布尔表达式为 true 时执行该语句块 --]
else
--[ 布尔表达式为 false 时执行该语句块 --]
end
与java
不同,布尔表达式中的逻辑运算是基于英文单词:
需求:自定义一个函数,可以打印table
,当参数为nil
时,打印错误信息
function printArr(arr)
if not arr then
print('数组不能为空!')
end
for index, value in ipairs(arr) do
print(value)
end
end