2017-05-29 10 views
0

私はパーティションenumerable methodを使用して、アレイを2つの異なるアレイに分割しようとしています。左側の配列が正しく機能しています。なぜパーティションメソッドは配列の末尾にnilを追加しますか?

def quicksort(array) 
    pivot = array.delete_at(6) 
    left, right = array.partition { |x| x < pivot } 
    puts "right's size" 
    puts right.size 
    puts 'right' 
    puts right 
end 

r = [14, 6, 41, 0, 5, 7294, 4, 25, 12, 24, 5, 2, 62, 67, 32, 78, 63, 3] 
p quicksort(r) 

そして、ここでnilが表示されるまで引き起こしている何IRB

right's size 
14 
right 
14 
6 
41 
5 
7294 
25 
12 
24 
5 
62 
67 
32 
78 
63 
nil 

からの結果ですか?

答えて

0

そのnilは、arrayの要素ではなく、メソッドの戻り値です。

quicksortから何も返されていないため、nilが返されます。

最後に戻すオブジェクトを書き込むと、オブジェクトは返されますが、nilではなく、オブジェクトが返されます。

def quicksort(array) 
    pivot = array.delete_at(6) 
    left, right = array.partition { |x| x < pivot } 
    puts "right's size" 
    puts right.size 
    puts 'right' 
    puts right 
    array 
end 

また、メソッドを呼び出すときにpを削除することも役立ちます。 puts right

はちょうどquicksort(array)代わりのp quicksort(array)

4

p quicksort(r)quicksortの定義の最後の行の評価値である、quicksort(r)の戻り値を出力します。 putsメソッドは常にnilを返します。

関連する問題