Правильный способ заполнения массива диапазоном в Ruby
Я работаю над книгой, в которой приводятся примеры преобразований областей в эквивалентные массивы с использованием методов "to_a"
Когда я запускаю код в irb, я получаю следующее предупреждение
warning: default `to_a' will be obsolete
Какова правильная альтернатива использованию to_a?
Существуют ли альтернативные способы заполнения массива с помощью Range?
Ответы
Ответ 1
Вы можете создать массив с диапазоном с использованием 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]
Ответ 2
Это работает для меня в 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)
Ответ 3
Похоже, вы это делаете:
0..10.to_a
Предупреждение от Fixnum # to_a, а не от Range # to_a. Вместо этого попробуйте:
(0..10).to_a
Ответ 4
Проверьте это:
a = [*(1..10), :top, *10.downto( 1 )]
Ответ 5
Я просто пытался использовать диапазоны от большего до меньшего количества и получил результат, которого я не ожидал:
irb(main):007:0> Array(1..5)
=> [1, 2, 3, 4, 5]
irb(main):008:0> Array(5..1)
=> []
Это из-за реализации диапазонов.
Поэтому мне пришлось использовать следующий вариант:
(1..5).to_a.reverse