为什么分区方法在数组末尾添加nil?

时间:2017-05-29 04:30:48

标签: ruby return-value

我正在尝试使用分区enumerable method将数组分成两个不同的数组。左数组工作正常。

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出现的原因是什么?

2 个答案:

答案 0 :(得分:4)

p quicksort(r)输出quicksort(r)的返回值,这是quicksort定义中最后一行的评估值:puts right。方法puts始终返回nil

答案 1 :(得分: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)