我使用以下代码从范围生成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}>
如何让它按预期一行?
答案 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}>
注意,如果要绘制范围,则应使用赋值。