web-dev-qa-db-ja.com

Rubyの範囲を配列に設定する正しい方法

「to_a」メソッドを使用してRangesが同等の配列に変換される例を示す本を読んでいます

Irbでコードを実行すると、次の警告が表示されます

 warning: default `to_a' will be obsolete

To_aを使用する正しい代替手段は何ですか?

配列に範囲を設定する別の方法はありますか?

186
Willbill

スプラットを使用して範囲を持つ配列を作成できますが、

>> a=*(1..10)
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

KernelArrayメソッドを使用して、

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]
332
Zamith

これは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を実行しています)

78
Daniel Lucraft

これをしているように聞こえます:

0..10.to_a

警告は、Range#to_aではなく、Fixnum#to_aからのものです。代わりにこれを試してください:

(0..10).to_a
34
Richard Turner

これをチェックして:

a = [*(1..10), :top, *10.downto( 1 )]
8
Boris Stitnicky

私はちょうどより大きな量からより少ない量まで範囲を使用しようとしましたが、私は予想していなかった結果を得ました:

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]