直接将splat转换为set

时间:2017-03-29 08:43:22

标签: ruby

我使用以下代码从范围生成set

my_set = *(1..10).to_set
 # => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

正如你所看到的,我得到的是一个阵列,而不是一个集合。

如果我把它分成两行,该语句是有效的:

my_set = *(1..10)
my_set = my_set.to_set
 # => #<Set: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}>

如何让它按预期一行

2 个答案:

答案 0 :(得分:4)

你已经有了一套。 Splatting it(*)给了你数组。不要喋喋不休:

my_set = (1..10).to_set # => #<Set: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}>

答案 1 :(得分:2)

Set.new也适用于范围:

Set.new(1..10)
 => #<Set: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}>

只是为了好玩,如果你想使用splat运算符(*):

my_set = (_ = *(1..10)).to_set
=> #<Set: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}>

注意,如果要绘制范围,则应使用赋值。