设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
楼主: 独孤残云
打印 上一主题 下一主题

[原创发布] 【新手互助】利用Mix-in(糅合)构建低耦合脚本

[复制链接]

Lv1.梦旅人

梦石
0
星屑
55
在线时间
14 小时
注册时间
2008-5-7
帖子
74
21
 楼主| 发表于 2010-8-23 12:32:42 | 只看该作者
本帖最后由 独孤残云 于 2010-8-23 12:35 编辑

回复 紫苏 的帖子
谢谢紫苏的提点,以后如果遇到Ruby中的一些高级机制,我会再向你请教的~

   
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
2 小时
注册时间
2008-5-2
帖子
140
22
发表于 2010-8-23 12:35:20 | 只看该作者
LZ你要淡定 TRAIN_ACTOR这个东东
关键的是它的算法 和 思路,这才是最重要的
为了一个include。。。。。。。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
14 小时
注册时间
2008-5-7
帖子
74
23
 楼主| 发表于 2010-8-23 12:38:50 | 只看该作者
回复 分子轨道理论 的帖子
谢谢分子兄提醒,是我太较真了^_^
不过,我是真的很希望六祈版主能明白里边的道理,绝没有别的意思~


   
回复 支持 反对

使用道具 举报

Lv1.梦旅人

旅之愚者

梦石
0
星屑
240
在线时间
812 小时
注册时间
2007-7-28
帖子
2148

贵宾

24
发表于 2010-8-23 12:41:07 | 只看该作者
本帖最后由 六祈 于 2010-8-23 12:44 编辑

回复 独孤残云 的帖子
我没其它特别好说的了,就引用IamI的原话吧
但是我想说,在大量使用全局变量的情况下,RM脚本已无低耦合性可言。
IamI 发表于 2010-8-19 20:20



另外你的意思我很明白,添加脚本时不要使用全局变量么

但IamI显然是说默认脚本已经使用了诸如$game_xxxx,$data_xxxx等等大量的全局变量


再回到帖子的主题:

紫苏大人说mixin是引入匿名的父模块,于是愚者想到原类的super方法将会因此而混乱,这个问题该如何解决呢
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
14 小时
注册时间
2008-5-7
帖子
74
25
 楼主| 发表于 2010-8-23 12:58:22 | 只看该作者
回复 BBBBB6 的帖子
如果事件能够用的很熟练的话,也是非常了不起的~接口回调也只是虚拟了事件特性的一部分,两者基本各有利弊吧~
你今年只有中三吗?如果喜欢做游戏的话,有机会可以好好发展一下自己的兴趣爱好,绝对会很有前途的~ 呵呵~


   
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
14 小时
注册时间
2008-5-7
帖子
74
26
 楼主| 发表于 2010-8-23 13:24:15 | 只看该作者
回复 六祈 的帖子
呵~ 解决方法,紫苏的帖子中已经阐述的很清楚了~
另外,能否把您写的“原类的super方法将会因此而混乱”的代码贴给我看看?


   
回复 支持 反对

使用道具 举报

Lv1.梦旅人

旅之愚者

梦石
0
星屑
240
在线时间
812 小时
注册时间
2007-7-28
帖子
2148

贵宾

27
发表于 2010-8-23 13:33:50 | 只看该作者
本帖最后由 六祈 于 2010-8-23 13:36 编辑

回复 独孤残云 的帖子
比如:
class Father
def hello
p "father"
end
end

class Son < Father
def hello
p "son"
super
end
end

这时候Son.new.hello就会p出son和father

然后

module Another_Father
def hello
p "not my father"
end
end
class Son
include Another_Father
end

这时候Son.new.hello就会p出son和not my father

也就是说,原类里定义的super失效【这个失效用词不严谨请勿吐槽,意指效果并非所希望的】了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
14 小时
注册时间
2008-5-7
帖子
74
28
 楼主| 发表于 2010-8-23 13:47:47 | 只看该作者
本帖最后由 独孤残云 于 2010-8-23 13:50 编辑

回复 六祈 的帖子
p "not my father"
该行后面再追加一句super——紫苏的帖子中明明已经说的很清楚了吧?

代码如下:
class Father
def hello
p "father"
end
end

class Son < Father
def hello
p "son"
super
end
end

module Another_Father
def hello
p "not my father"
super
end
end
class Son
include Another_Father
end


@son=Son.new
@son.hello

exit #结束程序

运行结果:
son ---- not my father ---- father

这个是六祈大人想要得到的结果吗?
   
回复 支持 反对

使用道具 举报

Lv1.梦旅人

旅之愚者

梦石
0
星屑
240
在线时间
812 小时
注册时间
2007-7-28
帖子
2148

贵宾

29
发表于 2010-8-23 13:56:20 | 只看该作者
回复 独孤残云 的帖子
见树只是树么?

如果原方法没有super怎么办?这样的话写每一个include的module的方法还要去看原类的方法,如果原方法没有父类,而你的module方法写入了super,也很麻烦
回复 支持 反对

使用道具 举报

Lv3.寻梦者

宛若

梦石
0
星屑
1563
在线时间
526 小时
注册时间
2007-8-19
帖子
1493

极短24参与开拓者

30
发表于 2010-8-23 17:11:54 | 只看该作者
  1. class Ruby
  2.   def writer
  3.     print "Matz"
  4.   end
  5. end
  6. #假设以上是默认脚本,为了游戏的良好兼容性,严禁修改
  7. module C
  8.   def writer
  9.     print "Dennis M Ritchie"
  10.   end
  11. end
  12. class Ruby
  13.   include C
  14. end
  15. Ruby.new.writer # => Matz

  16. #好吧,这样的话新定义的模块C就不能起到作用了,即:对于原方法中没有super的方法,不能使用添加模块中同名方法的方法来修改

  17. class Ruby
  18.   alias new_writer writer
  19.   def writer
  20.     new_writer
  21.     super
  22.   end
  23. end

  24. Ruby.new.writer # => Matz & Dennis M Ritchie
复制代码
汝等还在讨论啊- -
这不是很清楚了么……module方法只能在原方法中有super语句时才能用,否则需要手动添加一句super

点评

alias是邪术……是王道……  发表于 2010-8-23 17:16
还是不如alias好用啊,除非原数据结构都是已知的  发表于 2010-8-23 17:14
[url=http://rpg.blue/thread-219730-1-1.html]http://unhero.sinaapp.com/wi.php[/url]
[color=Red]如你所见这是个死坑,没错这就是打我的脸用的[/color]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-14 16:39

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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