「to_a」メソッドを使用してRangesが同等の配列に変換される例を示す本を読んでいます
Irbでコードを実行すると、次の警告が表示されます
warning: default `to_a' will be obsolete
To_aを使用する正しい代替手段は何ですか?
配列に範囲を設定する別の方法はありますか?
スプラットを使用して範囲を持つ配列を作成できますが、
>> 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パッチレベル114を実行しています)
これをしているように聞こえます:
0..10.to_a
警告は、Range#to_aではなく、Fixnum#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
これは別の方法です:
irb> [* 1..10]
=> [1、2、3、4、5、6、7、8、9、10]