2017-05-29 81 views
0

我想使用分區enumerable method將數組分成兩個不同的數組。左邊的數組工作正常。爲什麼分區方法在數組的末尾添加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) 

這裏是從IRB

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

是什麼原因造成的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也將有所幫助。

只是做的quicksort(array)代替p quicksort(array)

4

p quicksort(r)輸出的quicksort(r)的返回值,這是在quicksort定義的最後一行的評估值:puts right。方法puts總是返回nil

相關問題