网站首页 > 技术教程 正文
学习 Lua 的必要性
因为工作中经常与 nginx 打交道,而 nginx 又有大量的模块是由 Lua 写的,所以有必要学习下 Lua 基础的语法知识。Lua 作为一门动态脚本语言,解释执行,和 JavaScript 有点相似。
语言特点
- 语句结束没有分号
- 跟 JavaScript 很像
- 默认定义的是全局变量,定义局部变量需要加 local 关键字
- 数组索引从1开始
- 没有 i++ 操作符号,只能 i = i + 1
注释
- 单行注释
- -- 注释内容
- 多行注释
- --[[
- 注释内容
- ]]--
内置数据类型
总共有6种内置数据类型, 其中包括nil, boolean, number, string, table, function
- nil
- 通常是没有赋值,直接使用才会是这个值, 比如说下面的代码直接打印 变量 name
- lua print(name)
- 在 ifelse 判断语句中,nil 被当成false 分支,但 nil ~= false, 在 Lua 语言当中,不等于使用 ~= 来表示, 而不是我们常见的 != 。
- boolean
- 有两种取值:true, false
- number
- 所有的数值类型都使用 number 来表示,不管是整数,还是浮点数,其实内部的存储方式是双精度类型。
- string
- 字符串可以用双引号,也可以用单引号包围起来,特殊字符需要转义
name = "dev4mobile" name = 'dev4mobile' nameWithAge = 'dev4mobile \n 25'
- 多行字符串
welcome = [[ hello world ]]
- table
- 其实就是其它语言里面的对象, 有两种表现方式,一种是数组,一种是字典(Map),
- 都是使用大括号括起来的。记住数组索引从1开始。
arr = { 1, "dev4mobile", 'cn.dev4mobile@gamil.com', 12.3, function()endv}
person = { name = 'dev4mobile' }
- function
- 定义如下,以 function关键字作为开头,add 是函数名字
-- 一般定义 function add(a, b) return a + b end -- 传递多个参数 funcation print(...) print(...) end -- 返回多个参数 function() return "abc", 12, function() end end
控制流语句
- 循环
- 循环有3种写法,for, while,repeat .. until
- 说明: #变量名 表示读取变量的长度,可以是字符串和数组
-- for 循环
arr = { 1, 2, 3, 4, 5 }
for i=1, #arr do -- 索引从1开始
print(arr[i])
end
-- while 循环
arr = { 1, 2, 3, 4, 5 }
i = 1
while i <= #arr do
print(arr[i])
i = i + 1
end
-- repeate until 循环
arr = { 1, 2, 3, 4, 5 }
i = 1
repeat
print(arr[i])
i = i + 1
until i >= #arr
- 分支 ( ifelse )
name = "dev4mobile"
if #name > 10 then
print("name length = ".. #name)
elseif #name >5 then
print("name length > 5, real length = "..#name) -- 两个点..代表字符串
else
print("name length < "..#name)
end
面向对象
实现原理:有点类似 JavaScript 的实现使用原型方式,使用函数 + table 实现。
- 模块
- 在写demo之前有必要先介绍下模块的概念,一般来说一个文件就是一个模块,跟 JavaScript 一样, 导入模块关键字 require, 导出模块关键字return
- 下面我们来新建一个模块名
- 首先新建一个文件名: perosn.lua,输入下面代码
-- 定义模块
-- 解释器
#!/usr/local/bin/lua
local Person = {}
-- 导出模块名,类似JavaScript中的export
return Person
-- 导入模块
-- 解释器
#!/usr/local/bin/lua
local perosn = require('person')
- 构造对象
- 首先新建一个文件名: perosn.lua,输入下面代码
-- 定义模块
-- 解释器
#!/usr/local/bin/lua
local Person = {}
-- 定义构造函数
function Person:new(name, age)
-- __index 指向 父类 table
-- setmetatable 关联了 新创建的对象 { name = name, age = age } 与 Person 对象
return setmetatable({ name = name, age = age }, { __index = Person })
end
function Person:toString()
print('name='..self.name..', age='..self.age)
end
-- 导出模块名,类似JavaScript中的export
return Person
-- 导入模块
-- 解释器
#!/usr/local/bin/lua
local Perosn = require('person')
-- 调用构造函数
local person = Person:new("dev4mobile", 21)
-- 调用对象的toString方法, 这个方法是父类方法,需要我们setmetatable来绑定,也就是我们定义对象时 setmetatable({ name = name, age = age }, { __index = Person }) 来绑定的
person.toString()
猜你喜欢
- 2024-10-09 openresty代替nginx并使用lua扩展功能
- 2024-10-09 Redis弱事务性与Lua脚本原子性分析
- 2024-09-08 基于Nginx+lua的蓝绿发布系统(lvs与nginx)
- 2024-09-08 Go Web 框架 Gin 实践17—用 Nginx 部署 Go 应用
- 2024-09-08 一文看懂灰度发布——基于Nginx+Lua+Redis
- 2024-09-08 Redis中使用Lua脚本来实现并发下的原子操作
- 2024-09-08 运维篇—基于Nginx+Lua实现的灰度发布
- 2024-09-08 Nginx+Lua+Redis实现高性能缓存数据读取
- 2024-09-08 OpenResty实战-Lua入门-Lua模块(openresty教程)
- 2024-09-08 高并发限流技术分析及实践(高并发技术解决方案)
欢迎 你 发表评论:
- 10-23Excel计算工龄和年份之差_excel算工龄的公式year
- 10-23Excel YEARFRAC函数:时间的"年份比例尺"详解
- 10-23最常用的10个Excel函数,中文解读,动图演示,易学易用
- 10-23EXCEL中如何计算截止到今日(两个时间中)的时间
- 10-2390%人不知道的Excel神技:DATEDIF 精准计算年龄,告别手动算错!
- 10-23计算工龄及工龄工资(90%的人搞错了):DATE、DATEDIF组合应用
- 10-23Excel中如何计算工作日天数?用这两个函数轻松计算,附新年日历
- 10-23怎样快速提取单元格中的出生日期?用「Ctrl+E」批量搞定
- 最近发表
-
- Excel计算工龄和年份之差_excel算工龄的公式year
- Excel YEARFRAC函数:时间的"年份比例尺"详解
- 最常用的10个Excel函数,中文解读,动图演示,易学易用
- EXCEL中如何计算截止到今日(两个时间中)的时间
- 90%人不知道的Excel神技:DATEDIF 精准计算年龄,告别手动算错!
- 计算工龄及工龄工资(90%的人搞错了):DATE、DATEDIF组合应用
- Excel中如何计算工作日天数?用这两个函数轻松计算,附新年日历
- 怎样快速提取单元格中的出生日期?用「Ctrl+E」批量搞定
- Excel日期函数之DATEDIF函数_excel函数datedif在哪里
- Excel函数-DATEDIF求司龄_exceldatedif函数计算年龄
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)

本文暂时没有评论,来添加一个吧(●'◡'●)