2012-09-10 6 views
6

なぜですか[1..5] == [1,2,3,4,5]なぜ[1..5] == [1,2,3,4,5]でないのですか?

なぜですか[1..5].to_a == [1,2,3,4,5]

どのように[1..5][1,2,3,4,5]に変換しますか?

+1

です。[1..5]は '[(1..5)](1つのRangeオブジェクトを含む配列)と同じです。 'inspect'はこれが理解されていないとあまり有用ではありませんが、物事をクリアするはずのREPLに対して' [1..5] [0] 'を試してみてください。 –

+4

'[* 1..5]'で範囲を拡大する –

答えて

18

[1..5]は一つだけの要素を持つ配列、範囲オブジェクトであります1..5

[1..5].to_aまだ[1..5]

ですは[1,2,3,4,5]

2

[1..5]は、1つの要素(範囲オブジェクト)を持つ配列です。すべての反復処理が失敗します。配列には多くの種類のオブジェクトを含めることができます。上記の私の例では、範囲を単なる範囲として扱い、配列を直接作成しています。

1.9.3-p125 :008 > (1..5).to_a # Note regular parens. 
=> [1, 2, 3, 4, 5] 
1.9.3-p125 :009 > 

密接あなたが述べたものをより多くを行うには - [1..5]で始まる - あなたができる:

1.9.3-p125 :013 > newarray = [] 

1.9.3-p125 :014 > [1..5][0].each {|e| newarray << e} 
=> 1..5 
1.9.3-p125 :015 > newarray 
=> [1, 2, 3, 4, 5] 
1.9.3-p125 :016 > 
関連する問題