1

在来自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)
4

1 回答 1

5

为什么 orig_exit 最终不会以无限递归方式调用自己?

因为这里没有递归。

首先,exit从最后一行 ( exit(99)) 开始调用,该行又调用orig_exit,这是一个不同的函数。除非orig_exit明确调用exit(没有理由相信它确实如此),否则不可能递归。返回时orig_exit,它的返回值也从那里返回exit

alias_method已将被命名的方法重命名exitorig_exit,然后定义了一个全新的函数 named exit

于 2012-09-06T04:38:32.327 回答