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

Project1

 找回密码
 注册会员
搜索
查看: 1966|回复: 3
打印 上一主题 下一主题

[已经解决] 关于alias和super的问题……

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3574
在线时间
1767 小时
注册时间
2010-12-21
帖子
2282
跳转到指定楼层
1
发表于 2011-2-9 17:52:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 黄亦天 于 2011-2-9 22:32 编辑

例如我在某子类里定义父类已有的某方法:
  1. alias old_a a
  2. def a
  3.   old_a
  4.   p 2
  5. end
复制代码
  1. def a
  2.   super
  3.   p 2
  4. end
复制代码
这两者效果差不多,但是感觉貌似还是不怎么一样,以后再调用a方法的时候会有什么不同吗?
绿坝娘素材库企划

素材库获取方法:暂时中止,需求者私聊。

Lv3.寻梦者

弓箭手?剑兰

梦石
0
星屑
4804
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
2
发表于 2011-2-9 18:20:21 | 只看该作者
super与子类和父类有关,详细见:
新手教程——super的作用和外界调用类中函数_(8)

那么alias是给就方法的新名字。比如:
  1. class x
  2.   def a
  3.     p "old"
  4.   end
  5.   alias old_a a
  6.   def a
  7.     p "new"
  8.   end
  9. end
  10. @x = x.new
  11. x.a         #=>new
  12. x.old_a  #=>old
复制代码
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3574
在线时间
1767 小时
注册时间
2010-12-21
帖子
2282
3
 楼主| 发表于 2011-2-9 18:29:49 | 只看该作者
回复 一箭烂YiJL 的帖子

alias 是重命名方法,但是也同样是继承了父类的方法
super 是调用了父类同名的方法
在子类中都对这个 a 方法进行了重定义
只是想知道,像在我举的例子中一样,会对以后父类该方法的调用、子类该方法的调用有什么不同的影响?

点评

改为已经解决吧~(好晒的85评分啊!)  发表于 2011-2-9 21:28
绿坝娘素材库企划

素材库获取方法:暂时中止,需求者私聊。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

弓箭手?剑兰

梦石
0
星屑
4804
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
4
发表于 2011-2-9 20:11:23 | 只看该作者
回复 黄亦天 的帖子

虽然你这样用alias也可以达到相同super的效果,但是alias尽量不要用那么多,
而且本来alias不是专用于上层的用法,原意也非。
如果其他脚本也alias在左穿右插,弄得不好可能会出现死循环。
super要有父类才生效,无同名则错误。
alias不一定要有父类,上面有被覆盖的类即可,主要用于保留旧函数,
或者插进新脚本(又不想影响旧的)。如果其他脚本有a函数(那个类是继承另一个有a的函数),
自己脚本alias了a为old_a,(加上你的脚本在人家底下)然而就会alias了人家的那个。
再坏点的情况是人家那个a也用了alias,但a里面没有用alias出来的新函数名。(然后操作有误)
更不幸的就是死循环,这个不多说。

有时候需要到回调上两层,super就不能做到了。(没有super.super)
这样只有用alias从父类下手(下手方法有兴趣找我。)

点评

那个,近期认可的太多,等下一个问题一起去认可……  发表于 2011-2-9 22:32
见习天使...76VIP...  发表于 2011-2-9 21:27
这样…… 多谢指点,受教了  发表于 2011-2-9 20:53

评分

参与人数 2星屑 +414 收起 理由
fux2 + 244 帮忙认可
黄亦天 + 170 升级后评分的感觉就是好……

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-20 09:20

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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