在Ruby中使用范围填充数组的正确方法

我正在通过一本书,给出了使用它们的“to_a”方法将范围转换为等价数组的示例

当我在IRB中运行代码时,出现以下警告

warning: default `to_a' will be obsolete 

什么是使用to_a的正确select?

有替代方法来填充一个数组与范围?

你可以用splat创build一个范围的数组,

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

使用Kernel Array方法,

 Array (1..10) => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

或者使用to_a

 (1..10).to_a => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

这在irb中适用于我:

 irb> (1..4).to_a => [1, 2, 3, 4] 

我注意到:

 irb> 1..4.to_a (irb):1: warning: default `to_a' will be obsolete ArgumentError: bad value for range from (irb):1 

所以也许你错过了括号?

(我正在运行Ruby 1.8.6 patchlevel 114)

听起来像你这样做:

 0..10.to_a 

警告来自Fixnum#to_a,而不是来自Range#to_a。 试试这个:

 (0..10).to_a 

检查这个:

 a = [*(1..10), :top, *10.downto( 1 )] 

我只是试图使用从大到小量的范围,并得到了我没有想到的结果:

 irb(main):007:0> Array(1..5) => [1, 2, 3, 4, 5] irb(main):008:0> Array(5..1) => [] 

这是因为范围的实现。
所以我不得不使用下面的选项:

 (1..5).to_a.reverse