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名前が付けられたメソッドの名前をに変更し、名前が付けられたexitまったくorig_exit新しい関数exitが定義されました。

于 2012-09-06T04:38:32.327 に答える