【发布时间】:2013-06-27 10:45:03
【问题描述】:
您好,我正在研究一些 Ruby 代码。在 Ruby 中实现快速排序:
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 特性的信息。对不起,如果这是一个重复的问题,因为我不知道搜索这个问题的关键字。
【问题讨论】:
-
qsort 函数是一些漂亮的 ruby 代码。
x, *xs = lst等价于x, *xs = *lst的原因是因为x, y = [1, 2]等价于x, y = 1, 2,实际上是x, y = *[1, 2]。显然,在第一种情况下,当您在右侧站点上有一个数组并且在您分配给的左侧站点上有多个变量时,会出现隐式 splat。
标签: ruby