Lua教程-面向对象

Lua教程已接近尾声预计再有两章,从最开始对Lua的不熟悉到现在把所有Lua的基础知识都讲解出来,其实最开始在做与nginx结合限流才有这个想法,如果想着实现比较复杂的逻辑,还是要代码的,所以就想着把Lua教程分享出来。

面向对象特征

  1. 封装:把一个实体的信息封装到一个对象中。
  2. 继承:在不改变原有程序的基础上进行扩展,有利于减少代码重复提高开发效率。
  3. 多态:同一操作作用在不同的对象上,产生不同的结果。
    接下来介绍下Lua如何实现面向对象的,在开始前先说下点和冒号的区别:
符号说明
.需要接受self参数
:默认传入self

在举例中会对两种表示方式进行说明。

点的方式实现

这种方式是定义一个table,然后返回该table。

local _M = {
    username = "zhangsan" ,
    age = 30
}
function _M.getusername(self)
    return self.username
end

function _M.getage(self)
    return self.age
end

return _M

测试demo

local sharep = require("sharep")
local username = sharep.getusername(sharep)
print(username)
local age = sharep.getage(sharep)
print(age)

输出结果为:

zhangsan
30

冒号的方式实现

定义circle文件

local _M = {
    rate = 3.14,
    lang = 1
}
local mt = {__index = _M}

function _M:new()
    setmetatable(_M , mt)
    return _M
end

function _M:area(lang)
    self.lang = lang
    local area = self.rate * (lang/2) * (lang/2)
    return area
end
return _M

测试demo

local r = require("circle")
local round = r:new()
local area = round:area(10)
print(area)

输出结果:

78.5

继承

继承可以用元表进行表示,可以使用父类中的方法和变量,但是在Lua中不建议使用,在这里演示下。

  1. 创建父类 base.lua
local _M = {}
local mt = {__index = _M}
function _M:upper(s)
    return string.upper(s)
end

return _M
  1. 创建子类change.lua继承父类
local base = require("base")
local _M = {}
_M = setmetatable(_M , {__index = base})

function _M:lower(s)
    return string.lower(s)
end

return _M
  1. 创建测试类testchange.lua
local change = require("change")

print(change:upper("s"))
print(change:lower("A"))

输出结果:

S
a

好了关于面向对象就说这么多了,可以自行测试或者扩展更多的功能,也可以关注我的个人公众号一起学习。


在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨香异境

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值