在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)
答案 0 :(得分:5)
为什么orig_exit最终不会在无限递归中调用自身?
因为这里没有递归。
首先,从最后一行(exit
)调用exit(99)
,后者又调用orig_exit
,这是一个不同的函数。除非orig_exit
显式调用exit
(没有理由相信它),否则不可能进行递归。当orig_exit
返回时,其返回值也会从exit
返回。
alias_method
已将 名为exit
的方法重命名为orig_exit
,然后定义了一个名为exit
的全新函数。