什么是" *"在这个递归ruby函数中意味着什么?

时间:2016-01-29 15:33:37

标签: ruby

我通过对quicksort类进行猴子修补来阅读此代码约为Array

class Array
  def quicksort
    return [] if empty?

    pivot = delete_at(rand(size))
    left, right = partition(&pivot.method(:>))

    return *left.quicksort, pivot, *right.quicksort
  end
end

我不知道在*开头看到的星(*left.quicksort)符号是什么。我们只能使用left.quicksort

3 个答案:

答案 0 :(得分:2)

星形(在本例中)代表阵列拆包。它背后的想法是你想要一个带有给定元素的数组,而不是数组 数组,元素,数组

left  = [1, 2, 3]
pivot = 4
right = [5, 6, 7]

[left, pivot, right] # => [[1, 2, 3], 4, [5, 6, 7]]

[*left, pivot, *right] # => [1, 2, 3, 4, 5, 6, 7]

答案 1 :(得分:0)

*获取参数列表并将它们拆分为单个元素。 这允许您返回一个非嵌套数组,即使左侧和右侧本身返回一个数组。

关于我们只能使用left.quicksort你试过吗?

def a()
  return *[1,2,3], 4, *[5,6]
end

def b()
 return [1,2,3], 4, *[5,6]
end

b()
=> [[1, 2, 3], 4, 5, 6]
a()
=> [1, 2, 3, 4, 5, 6]

答案 2 :(得分:0)

如果没有星号,您将返回三个值...第一个和最后一个值将是具有多个值的单个数组

[array1], pivot, [array2]

使用星号,数组值将作为单独的组件返回...

array1_value_1, array1_value_2, array1_value_3, ..., pivot, array2_value_1, array2_value2, array2_value_3, ...