[Lua]面向对象
Posted lyh916
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Lua]面向对象相关的知识,希望对你有一定的参考价值。
这里主要说一下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]面向对象的主要内容,如果未能解决你的问题,请参考以下文章