Ruby中的Splat操作符(快速举例)

您好我正在研究一些Ruby代码。 在Ruby中实现Quicksort:

1 def qsort(lst) 2 return [] if lst.empty? 3 x, *xs = *lst 4 less, more = xs.partition{|y| y < x} 5 qsort(less) + [x] + qsort(more) 6 end 

鉴于:

 lst = [1, 2, 3, 4, 5] x, *xs = *lst 

我不知道我是否理解第3行正确地做了什么:

根据我的观察和实验,这将从lstx分配1 ,并将lst的其余部分分配给xs

我发现这两个人也在做同样的事情:

 x, *xs = *lst 

相当于

 x, *xs = lst 

我的问题是,这个好function的名称是什么(我之后会编辑标题以适应)? 然后我可以自己研究一下这个Rubyfunction。 很抱歉,如果这是一个重复的问题,因为我不知道搜索此问题的关键字。

此function的名称在Ruby中称为splat运算符。

Ruby,Groovy和Perl中的splat操作符允许您在参数和数组之间切换:它在一系列参数中拆分列表,或者收集一系列参数来填充数组。

来自4行代码 。

这个说法

 x, *xs = *lst 

对我来说没什么意义,但是这些:

 x, *xs = [1, 2, 3] # x -> 1, xs -> [2, 3] x = 1, *[2, 3, 4] # x -> [1, 2, 3, 4] 

这种用法IMO与参数无关,但正如其他人所说,splat可以(并且通常是)与参数一起使用:

 def foo(a, b, c) end foo(*[1,2,3]) # a -> 1, b -> 2, c -> 3