开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

问答求助

关注:473

当前位置:游戏蛮牛 技术专区 问答求助

_____________________________________________________________________________________________________________
问答求助版块规则:

  1、问题尽量描述清楚
      2、代码要放在代码块里
      3、附件最好放到云盘,然后把链接放到TXT文档里,上传TXT文档。【最好没有附件,你懂得】
      4、本版块回复不得无意义,如:顶、呵呵、不错......以及擦边!【真的会扣分的哦】严重者,封IP!
      5、问题得到解决,请选择最佳答案。
      6、若问题是你自己解决了,可以联系管理员,返还蛮牛币,写下你的答案,另有蛮牛币奖赏。
_____________________________________________________________________________________________________________
查看: 598|回复: 10

[脚本] lua面向对象

[复制链接]  [移动端链接]
3偶尔光临
174/300
排名
9749
昨日变化
127

2

主题

40

帖子

174

积分

Rank: 3Rank: 3Rank: 3

UID
230741
好友
0
蛮牛币
279
威望
0
注册时间
2017-7-7
在线时间
54 小时
最后登录
2017-10-23
发表于 2017-10-4 16:07:16 | 显示全部楼层 |阅读模式
30蛮牛币
本帖最后由 Tong1993 于 2017-10-4 17:44 编辑

最近在看lua的语法,讲到了面向对象。下面的例子是菜鸟教程上的。斜杠注释是我写的,问题也写在里面了。
看看哪位过路的大神来瞅瞅,帮小弟看看


以下我们演示了 Lua 面向对象的完整实例:
-- Meta class
Shape = {area = 0}

// 下面讲的应该是构造方法,同样是用new方法。
// 问题来了,new括号的中side是什么鬼?
function Shape:new (o,side)
  // 这里的O是什么东西?实例化的对吗?还是别的啥?
  o = o or {}
  // 下面这段应该是关联字段用的。就是让对象也拥有类中定义的字段,不知道理解的对不对。。
  // self是什么东西?能够理解成对象本身吗?还是什么的?
  setmetatable(o, self)
  self.__index = self
  // 同样出现了side。。。。
  side = side or 0
  // 这里是在给area字段做定义吗?这难道不是应该用方法来做的吗?
  self.area = side*side;
  return o
end

// 下面是定义的类的方法,输出字段
function Shape:printArea ()
  print("面积为 ",self.area)
end

-- 创建对象
// 结合上面的看法,o应该是不是对象,所以一直很懵逼,按照对象初始化的方式来说的话
这里创建了新对象,字段area赋值为10,然而后面调用打印方法后的结果却是100。很明显这
里的10是赋值给了side,可是这个side是什么鬼,而且这里C#中面向对象在构造方法中初始化
有很大的区别呀。。。
myshape = Shape:new(nil,10)

myshape:printArea()

大神求解。。。。。。


[发帖际遇]: Tong1993 发帖时在路边捡到 1 蛮牛币,偷偷放进了口袋. 幸运榜 / 衰神榜

回复

使用道具 举报

4四处流浪
462/500
排名
5785
昨日变化
3

7

主题

134

帖子

462

积分

Rank: 4

UID
231610
好友
3
蛮牛币
1161
威望
0
注册时间
2017-7-11
在线时间
171 小时
最后登录
2017-10-22

迈向小康

发表于 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的元表
这是我个人的理解

回复

使用道具 举报

3偶尔光临
174/300
排名
9749
昨日变化
127

2

主题

40

帖子

174

积分

Rank: 3Rank: 3Rank: 3

UID
230741
好友
0
蛮牛币
279
威望
0
注册时间
2017-7-7
在线时间
54 小时
最后登录
2017-10-23
 楼主| 发表于 2017-10-5 17:57:39 | 显示全部楼层
有没有大神呀。。。。。

回复

使用道具 举报

3偶尔光临
174/300
排名
9749
昨日变化
127

2

主题

40

帖子

174

积分

Rank: 3Rank: 3Rank: 3

UID
230741
好友
0
蛮牛币
279
威望
0
注册时间
2017-7-7
在线时间
54 小时
最后登录
2017-10-23
 楼主| 发表于 2017-10-6 15:42:14 | 显示全部楼层
顶一下自己的帖子咯

回复

使用道具 举报

4四处流浪
462/500
排名
5785
昨日变化
3

7

主题

134

帖子

462

积分

Rank: 4

UID
231610
好友
3
蛮牛币
1161
威望
0
注册时间
2017-7-11
在线时间
171 小时
最后登录
2017-10-22

迈向小康

发表于 2017-10-7 09:38:44 | 显示全部楼层
大神都放假出去玩了

回复

使用道具 举报

3偶尔光临
174/300
排名
9749
昨日变化
127

2

主题

40

帖子

174

积分

Rank: 3Rank: 3Rank: 3

UID
230741
好友
0
蛮牛币
279
威望
0
注册时间
2017-7-7
在线时间
54 小时
最后登录
2017-10-23
 楼主| 发表于 2017-10-7 10:38:46 | 显示全部楼层
田地一过客 发表于 2017-10-7 09:38
大神都放假出去玩了

这就尴尬了。。。

回复

使用道具 举报

4四处流浪
462/500
排名
5785
昨日变化
3

7

主题

134

帖子

462

积分

Rank: 4

UID
231610
好友
3
蛮牛币
1161
威望
0
注册时间
2017-7-11
在线时间
171 小时
最后登录
2017-10-22

迈向小康

发表于 2017-10-7 15:49:21 | 显示全部楼层
你把这个教程网址发下,我也看看学习学习

回复

使用道具 举报

3偶尔光临
174/300
排名
9749
昨日变化
127

2

主题

40

帖子

174

积分

Rank: 3Rank: 3Rank: 3

UID
230741
好友
0
蛮牛币
279
威望
0
注册时间
2017-7-7
在线时间
54 小时
最后登录
2017-10-23
 楼主| 发表于 2017-10-7 16:37:24 | 显示全部楼层
田地一过客 发表于 2017-10-7 15:49
你把这个教程网址发下,我也看看学习学习

直接百度搜索菜鸟教程就可以了

回复

使用道具 举报

4四处流浪
462/500
排名
5785
昨日变化
3

7

主题

134

帖子

462

积分

Rank: 4

UID
231610
好友
3
蛮牛币
1161
威望
0
注册时间
2017-7-11
在线时间
171 小时
最后登录
2017-10-22

迈向小康

发表于 2017-10-7 20:26:11 | 显示全部楼层
Tong1993 发表于 2017-10-7 16:37
直接百度搜索菜鸟教程就可以了

你应该是LUA的教程没看完吧?这个理解着还行
[发帖际遇]: 田地一过客 被钱袋砸中进医院,看病花了 2 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

3偶尔光临
174/300
排名
9749
昨日变化
127

2

主题

40

帖子

174

积分

Rank: 3Rank: 3Rank: 3

UID
230741
好友
0
蛮牛币
279
威望
0
注册时间
2017-7-7
在线时间
54 小时
最后登录
2017-10-23
 楼主| 发表于 2017-10-7 22:31:02 | 显示全部楼层
田地一过客 发表于 2017-10-7 20:26
你应该是LUA的教程没看完吧?这个理解着还行

前面都看了呀,就是看到面向对象这里卡住了。。。。

回复

使用道具 举报

3偶尔光临
174/300
排名
9749
昨日变化
127

2

主题

40

帖子

174

积分

Rank: 3Rank: 3Rank: 3

UID
230741
好友
0
蛮牛币
279
威望
0
注册时间
2017-7-7
在线时间
54 小时
最后登录
2017-10-23
 楼主| 发表于 2017-10-11 09:28:58 | 显示全部楼层
再顶一下

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表