您好我正在研究一些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行正确地做了什么:
根据我的观察和实验,这会将1
从lst
分配到x
,将lst
的其余部分分配到xs
。
我发现这两个人也在做同样的事情:
x, *xs = *lst
相当于
x, *xs = lst
我的问题是,这个好功能的名称是什么(我之后会编辑标题以适应)?然后我可以自己研究一下这个Ruby功能。很抱歉,如果这是一个重复的问题,因为我不知道搜索此问题的关键字。
答案 0 :(得分:6)
此功能的名称在Ruby中称为 splat 运算符。
答案 1 :(得分:2)
Ruby,Groovy和Perl中的splat操作符允许您在参数和数组之间切换:它在一系列参数中拆分列表,或者收集一系列参数来填充数组。
答案 2 :(得分:1)
本声明
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