2012-09-10 38 views
6

¿Por qué no es [1..5] == [1,2,3,4,5]?¿Por qué no es [1..5] == [1,2,3,4,5]?

¿Por qué no es [1..5].to_a == [1,2,3,4,5]?

Cómo convertir de [1..5] a [1,2,3,4,5]?

+1

'[1..5]' es lo mismo que '[(1..5)]' (una Matriz que contiene un objeto Range). El 'inspeccionar' no es muy útil si esto no se entiende, pero pruebe' [1..5] [0] 'en el REPL, lo que debería aclarar las cosas. –

+4

Amplíe el rango con '[* 1..5]' –

Respuesta

18

[1..5] es una matriz que solo tiene un elemento, el objeto de rango 1..5

[1..5].to_a sigue siendo [1..5]

(1..5).to_a es [1,2,3,4,5]

2

[1..5] es una matriz con un elemento, un objeto de rango, todos los intentos de iterar a través de él fallarán. array puede tener muchos tipos de objetos en ellos. En mi ejemplo anterior trato el rango como solo un rango y hago cualquier arreglo desde él directamente.

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

hacer más estrechamente lo que usted dijo - a partir de [1..5] - se podía hacer:

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 > 
Cuestiones relacionadas