Я работаю над книгой, в которой приводятся примеры преобразования диапазонов в эквивалентные массивы с использованием их методов "to_a"
Когда я запускаю код в IRB, я получаю следующее предупреждение
warning: default `to_a' will be obsolete
Какова правильная альтернатива использованию to_a?
Существуют ли альтернативные способы заполнения массива Range?
Ответы:
Вы можете создать массив с диапазоном, используя сплат,
используя
Kernel
Array
метод,или используя to_a
источник
order = 1
. Потомorder << (2.25).to_a
. Но это создает другой массив внутри массива, я просто хочу диапазон от 2 до 25. Тем не менее, если я пытаюсьorder << (2.25)
получить ошибку, я не могу преобразовать Range в Integer.concat
вместо<<
. Кроме того, вы не должны получать сообщение «не можете преобразовать Range в Integer», еслиorder
это не целое число - в этом случае вы будете сдвигать биты, а не добавлять массив.(1..10).to_a
для обратной совместимости[*1..10]
.Это работает для меня в IRB:
Я замечаю, что:
Так что, возможно, вам не хватает скобок?
(Я использую Ruby 1.8.6 уровня исправления 114)
источник
Fixnum.methods.include?(to_a)
ruby 1.9.2, вы заметите, что метод to_a больше не определен, поэтому вы получили это сообщение об амортизации в 08Fixnum.instance_methods.include?(:to_a)
methods.include?
более информативно:$ irb
irb(main):001:0> Fixnum.methods.include?(to_a)
(irb):1: warning: default
to_a 'будет устаревшим=> false
irb(main):002:0> Fixnum.instance_methods.include?(:to_a)
=> false
to_a
предупреждение в первой форме. Это потому , что вы звонитеto_a
наself
- вы на самом деле не проверки , является лиto_a
это метод Fixnum. Попробуйте позвонитьto_a
самостоятельно, и вы увидите то же самое предупреждение.Похоже, вы делаете это:
Предупреждение от Fixnum # to_a, а не от Range # to_a. Попробуйте это вместо этого:
источник
Проверь это:
источник
Это еще один способ:
источник
Я просто попытался использовать диапазоны от большего к меньшему количеству и получил результат, которого я не ожидал:
Это из-за реализации диапазонов.
Поэтому мне пришлось использовать следующую опцию:
источник
5.downto(1).to_a
что это еще один способ выражения уменьшающегося диапазона stackoverflow.com/a/8927009/703903