Lua语法(六)——面相对象编程

简介: Lua语法(六)——面相对象编程

使用Lua表 进行类的模拟,从而面向对象编程

@TOC

面向对象编程

类创建

Lua中没有类这个类型,所以只有用表来模拟类

创建类方法的方式

方式1:表内用键值对的方式

方式2:表外使用 : 冒号

方式3:表外使用 点 .

案例见下方代码

冒号和点的区别

冒号是点的缩写形式,可以省略传入自身这个参数

综合案例:

--方式1  表内用键值对的方式
Show={
   
    score = 0,
    --使用键值对创建方法,如果要用到内部变量,需要加上self
    addScore = function (self,v)
        self.score = self.score + v
        print(self.score)
    end
}

--方式2  使用 : 冒号可以省略传入自己这个参数
function Show:decScore(v)
    self.score = self.score -v
    print(self.score)
end

--方式3   使用 点 . 需要添加上self
function Show.mulScore(self,v)
    self.score = self.score + v*2
    print(self.score)
end

function Show:new(o)
    o = o or {
   }
    self.__index = self
    setmetatable(o,self)
    return o
end

local a = Show:new()
a:addScore(10)
a:decScore(5)
a.mulScore(a,5)     --使用点来调用方法必须要传入自己
--输出
10
5
15

继承

Show={
   
    score = 0,
    --使用键值对创建方法,如果要用到内部变量,需要加上self
    addScore = function (self,v)
        self.score = self.score + v
        print(self.score)
    end
}

--使用 : 冒号可以省略传入自己这个参数
function Show:decScore(v)
    self.score = self.score -v
    print(self.score)
end

--使用 点 . 需要添加上self
function Show.mulScore(self,v)
    self.score = self.score + v*2
    print(self.score)
end

function Show:new(o)
    o = o or {
   }
    self.__index = self
    setmetatable(o,self)
    return o
end
-------------继承自Show---------------
BigShow = Show:new()    --继承自Show

local big = BigShow:new{
   min =0}

big:addScore(10)
big:decScore(5)
-- big:mulScore(5)
big.mulScore(big,5)
print(big.min)

--输出
10
5
15
0

属性私有性—对偶表示

使用对偶表示,实现属性相对私有性。

local score ={
   }
Show = {
   }

function Show:addScore(v)
    score[self] = score[self] + v
end

function Show:decScore(v)
    score[self] = score[self] - v
end

function Show:score(v)
    return score[self]
end

function Show:new(o)
    o = o or {
   }
    setmetatable(o,self)
    self.__index = self
    score[o]=0  --初始化分数
    return o
end

local big = Show:new()
big:addScore(10)    --只能通过方法进行修改内部属性值
print(big:score())  --只能通过方法访问内部属性
print(big.score(big))

--输出
10
10
目录
相关文章
Lua 基本语法
**Lua 语法摘要** - 保留关键词:`and, break, do, else, elseif, end, false, for, function, if, in, local, nil, not, or, repeat, return, then, true, until, while, goto` 不可作标识符。 - 全局变量默认,无需声明。赋值创建全局变量,如 `b=10`;未初始化时访问返回 `nil`。
Lua 基本语法
Lua语言保留关键词包括and, break, do等,下划线开头的大写变量为内部使用。全局变量无需声明,赋值即创建,未初始化时值为nil。删除全局变量通过赋值为nil实现,变量等于nil时表示不存在。
Lua 基本语法
Lua语言保留关键词包括and, break, do等,下划线开头的大写变量为内部使用。全局变量无需声明,赋值即创建,未初始化为nil。删除全局变量赋值为nil,变量等于nil时表示不存在。
Lua 基本语法
Lua语言保留关键词包括and、break、do等,下划线开头的大写变量如&_VERSION为内部使用。默认变量为全局,无需声明,赋值后创建,未初始化值为nil。删除全局变量通过赋值为nil实现,变量等于nil时视为不存在。
|
29天前
|
Java API C语言
Lua语法(一)
Lua语法(一)
13 0
Lua语法(一)
|
29天前
|
Java
Lua语法(五)——垃圾回收
Lua语法(五)——垃圾回收
40 0
|
29天前
Lua语法(四)——协程
Lua语法(四)——协程
22 0
|
29天前
|
索引
Lua语法(三)——元表与元方法
Lua语法(三)——元表与元方法
28 0
|
29天前
|
缓存
Lua语法(二)——闭包/日期和时间
Lua语法(二)——闭包/日期和时间
52 0
|
3月前
|
存储 缓存 NoSQL
Redis系列学习文章分享---第十三篇(Redis多级缓存--JVM进程缓存+Lua语法)
Redis系列学习文章分享---第十三篇(Redis多级缓存--JVM进程缓存+Lua语法)
70 1