2012-09-06 22 views
1

在以下代碼中,從ruby docs開始,爲什麼orig_exit最終會自動調用無限遞歸?alias_method遞歸

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) 

回答

5

爲什麼不orig_exit最終調用自身無限遞歸?

因爲這裏沒有遞歸。

首先,從最後一行(exit(99))調用exit,後者又調用orig_exit,這是一個不同的功能。除非orig_exit顯式調用exit(沒有理由相信它),否則不可能遞歸。當orig_exit返回時,其返回值也從exit返回。

alias_method已改名方法命名exitorig_exit,然後定義一個名爲exit全新的功能。

+0

現在很清楚。謝謝! – user1561873