繁体   English   中英

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

[英]Splat operator in Ruby (a quicksort example)

您好我正在研究一些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

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

此功能的名称在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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM