メソッドの定義が読み込まれるとき、定義だけがされて中身のそれぞれの式については(文法的な間違いを除き)確認しません。なので、後から定義したメソッドが定義の中身の方で呼び出されても、問題ないのです。単純な下記のコードを考えてみてください。
Ruby
1def hoge # …1
2 fuga # …4
3end
4def fuga # …2
5 puts "fuga" # …5
6end
7hoge # …3
このときRubyは以下のような処理をします。
- hogeメソッドが定義されます。中でどんなメソッドが呼び出されているかは確認しません。
- fugaメソッドが定義されます。中でどんなメソッドが呼び出されているかは確認しません。
- hogeメソッドが呼ばれます。
- hogeメソッド内を一行一行評価します。その結果fugaメソッドがあったのでこれを呼び出します。fugaメソッドは2.で定義済みなので、エラーになりません。
- fugaメソッド内を一行一行評価します。
puts "fuga"
とあったので、fugaを表示します。
なお、このコード例では、最後のhoge
を先頭行に持ってくると、hogeメソッドが未定義なので、エラーになります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。