什么是*&引用;在这个递归ruby函数中是什么意思?
我阅读了这段关于什么是*&引用;在这个递归ruby函数中是什么意思?,ruby,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 我不知道左边*开
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
我不知道左边*开头的星号(*
)是什么。快速排序。我们不能只用左。快速排序吗?星形(在本例中)代表数组解包。其背后的思想是,您希望获得一个包含给定元素的数组,而不是数组、元素、数组的数组:
*获取参数列表并将其拆分为单个元素。
这允许您返回一个未嵌套的数组,即使左侧和右侧本身都返回一个数组
关于我们不能只使用左。快速排序你试过了吗
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]
如果没有星号,将返回三个值。。。第一个和最后一个值将是具有多个值的单个数组
[array1], pivot, [array2]
带星号的数组值将作为单独的组件返回
array1_value_1, array1_value_2, array1_value_3, ..., pivot, array2_value_1, array2_value2, array2_value_3, ...
如果一个问题是重复的,并且你真的想得到一些原始的反馈,那么你应该去ruby IRC的一个渠道询问。您甚至不必拥有IRC客户端,这里有基于web的访问,例如:。还是红宝石
array1_value_1, array1_value_2, array1_value_3, ..., pivot, array2_value_1, array2_value2, array2_value_3, ...