Ruby:覆盖别名

时间:2012-05-27 03:32:37

标签: ruby

def a_method
  p "in distress"
end

alias :hero :a_method
def a_method
  hero
  p "Saved by the hero"
end

这是一个遇险的方法,它已被英雄保存。但其他人不喜欢故事的结局,并决定覆盖英雄所做的事情。

alias :nemesis ?
def ?
   #which method to call?
   p "Captured by the nemesis"
end

对手是否有可能覆盖英雄所做的事情并且最终结果是

"in distress"
"Captured by the nemesis"

1 个答案:

答案 0 :(得分:0)

看起来这样可以在没有任何混叠的情况下工作:

def a_method
  hero
  p "Captured by the nemesis"
end

然而,在英雄出现之前,没有任何方法可以让克星“unalias”并确定:a_method的旧值。事实上,Ruby不会保留这样的历史记录,因此首先需要在这种覆盖情况下使用别名。