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)
orig_exitが無限再帰で自分自身を呼び出すことにならないのはなぜですか?
ここには再帰がないからです。
最初に、exit
が呼び出されます。最後の行(exit(99)
)から呼び出され、次に、が呼び出されorig_exit
ます。これは別の関数です。orig_exit
明示的に呼び出さない限りexit
(それを信じる理由はありません)、再帰の可能性はありません。がorig_exit
戻ると、その戻り値もから返さexit
れます。
alias_method
名前が付けられたメソッドの名前をに変更し、名前が付けられたexit
まったくorig_exit
新しい関数exit
が定義されました。