2016-11-20 8 views
0

バブルソートを行うために次のコードを作成し、コードは正常に機能しました。私の質問はなぜ働いたのですか?メソッドが呼び出されると、コンピュータはまず$ xが0に等しいかどうか評価します。しかし、$ xに値を代入していないので、各ループを実行するには?このループはどのようにして条件をtrueまたはfalseに評価しますか?

xがグローバル変数であるという事実と関係しているようですが、どういうことがわかりません。提案してください!

def bubble_sort(arr) 
    while $x != 0 
     $x = 0 
     arr.each_with_index do |i, j| 
      if arr[j+1] != nil && i > arr[j+1] 
      arr[j], arr[j+1] = arr[j+1], arr[j] 
      $x += 1 
      end 
     end 
    end 
    arr 
end 

p bubble_sort([4,3,78,2,0,5,100,34]) 
+0

グローバル変数である 'x'とは関係ありません。それは*あなたが*その変数を持っていることとは関係ありません。 – Makoto

答えて

0

このメソッドを1回呼び出すと仮定しますか? ...

最初の呼び出しでグローバルな$ xが存在せず、そのグローバル変数の検索でnilが返されます。

したがって、最初のwhileループはとしてnil == 0であり、これはfalseであると評価されます。

+0

私はあなたの答えを正しく理解していれば、これは何が起こったのか... $ xが0かどうかを評価している間です。私は最初に$ xに値を割り当てていないので、$ xの値としてnilが返されます。 nilは0に等しくないので、条件が真であると評価され、したがって各ループが実行されます。 @JoeyLi、正確には –

+0

です。 – Myst

関連する問題