码迷,mamicode.com
首页 > 其他好文 > 详细

[Lua]面向对象

时间:2018-08-31 00:26:11      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:lua   oca   color   class   self   需要   影响   div   分析   

这里主要说一下Lua在面向对象的使用中需要注意的地方。

 

一.self

self指的是调用者自身,例如:

local a = Shape:New(nil, 10),即local a = Shape.New(self, nil, 10),self指的是Shape;

a:PrintArea(),即a.PrintArea(self),self指的是a。

 1 Shape = {area = 0}
 2 
 3 function Shape:New(o, side)
 4     o = o or {}
 5     setmetatable(o, self)
 6     self.__index = self
 7     side = side or 0
 8     self.area = side * side
 9     return o
10 end
11 
12 function Shape:PrintArea()
13     print("面积为 ", self.area)
14 end
15 
16 print(Shape.area)
17 
18 local a = Shape:New(nil, 10)
19 a:PrintArea()
20 print(Shape.area)
21 
22 local b = Shape:New(nil, 20)
23 b:PrintArea()
24 print(Shape.area)
25 
26 a:PrintArea()
27 print(Shape.area)

技术分享图片

输出分析:

第二句,在Shape:New(nil, 10)时,Shape.area被赋值为100,在a:PrintArea()时,本来要打印的是a.area,但该键值为空,实际打印的是Shape.area。

第六句,在Shape:New(nil, 20)时,Shape.area被赋值为400。

 

那么,可以将上面的self.area = side * side改一下,改为o.area = side * side,输出如下。可以看到,此时New出来的实例都有各自的area值,不影响Shape表,此时才是符合面向对象设计的。

技术分享图片

 

二.元表的__index元方法

 

[Lua]面向对象

标签:lua   oca   color   class   self   需要   影响   div   分析   

原文地址:https://www.cnblogs.com/lyh916/p/9563319.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!