alias_method递归

时间:2012-09-06 04:36:16

标签: ruby alias

ruby docs的以下代码中,为什么orig_exit最终没有在无限递归中调用自身?

module Mod
  alias_method :orig_exit, :exit
  def exit(code=0)
    puts "Exiting with code #{code}"
    orig_exit(code)
  end
end
include Mod
exit(99)

1 个答案:

答案 0 :(得分:5)

  

为什么orig_exit最终不会在无限递归中调用自身?

因为这里没有递归。

首先,从最后一行(exit)调用exit(99),后者又调用orig_exit,这是一个不同的函数。除非orig_exit显式调用exit(没有理由相信它),否则不可能进行递归。当orig_exit返回时,其返回值也会从exit返回。

alias_method已将 名为exit的方法重命名为orig_exit,然后定义了一个名为exit的全新函数。