Правильный способ заполнения массива диапазоном в 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