- 排名
- 3770
- 昨日变化
- 1
 
- UID
- 231610
- 好友
- 3
- 蛮牛币
- 1044
- 威望
- 0
- 注册时间
- 2017-7-11
- 在线时间
- 270 小时
- 最后登录
- 2018-4-26
|
发表于 2017-10-4 16:07:17
|
显示全部楼层
1.首先shape:new(nil,10)
调用的是function shape:new 方法 o和side为参数
这个new方法应该是相当于C#的构造函数
然后o为nil side为10
然后下边o进行赋值 赋得是他本身或者一个空的表
下边Setmetatable(o,self)
是一个设置元表的方法 在lua元表中有具体说明 你可以看一下
意思是给o这个表设置元表self
下边self.__index = self
_index是一个元方法
就是说 self的元方法为self
side = side or 0
表示side赋值为side或者0
因为上面side传的有参数10,所以side就为10
self.area = side*side;
self本身是一个空表
然后直接进行了一个键值的赋值相当于self={area=side*side}
这个self.area=10*10=100
return o就是一个返回值对表o进行更新
应该是一个表内容的刷新赋值
如果这句话注释就会报错
但是可以替换
{
如temp=getmetatable(o);//这是一个获取o的元表的方法,然后赋值给temp
return temp
下面的调用方法就改为 temp.area 这样也行
}
最后下面的调用
myshape相当于一个实例化类shape,后面跟的是构造函数的参数,给上面赋值
下面调用的是它的方法printArea
self.area
self本身没有定义,它是o的元表
这是我个人的理解
|
|