Answers:
您可以使用splat创建具有范围的数组,
>> 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]
order = 1
。然后order << (2.25).to_a
。但这会在数组内创建另一个数组,我只希望范围是2到25。但是,如果我尝试order << (2.25)
得到错误,则无法将Range转换为Integer。
concat
代替<<
。另外,除非order
是整数,否则您不应该得到“无法将Range转换为Integer” 的信息-在这种情况下,您将进行位移位,而不是数组附加。
(1..10).to_a
向后兼容使用
[*1..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补丁程序级别114)
Fixnum.methods.include?(to_a)
在ruby 1.9.2中运行,您会注意到to_a方法不再定义,因此,为什么在08
Fixnum.instance_methods.include?(:to_a)
methods.include?
它提供的信息更多:$ irb
irb(main):001:0> Fixnum.methods.include?(to_a)
(irb):1: warning: default
to_a'将作废-Richard => false
irb(main):002:0> Fixnum.instance_methods.include?(:to_a)
=> false
to_a
第一种形式的警告的原因。这是因为你调用to_a
上self
-你实际上并没有检查是否to_a
是Fixnum对象的方法。尝试to_a
自行致电,您将看到相同的警告。
这是另一种方式:
irb> [*1..10]
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
我只是尝试使用从较大到较小的范围,并得到了意想不到的结果:
irb(main):007:0> Array(1..5)
=> [1, 2, 3, 4, 5]
irb(main):008:0> Array(5..1)
=> []
那是因为range实现。
所以我不得不使用以下选项:
(1..5).to_a.reverse
5.downto(1).to_a
这是表达范围减小的另一种方式stackoverflow.com/a/8927009/703903