2012-01-12 15 views
11

Para una matriz, cuando escribo:¿Por qué Array.to_s devuelve los paréntesis?

puts array[0] 

==> text 

Sin embargo, cuando escribo

puts array[0].to_s 

==> ["text"] 

por qué los soportes y cotizaciones? ¿Qué me estoy perdiendo?

Adición: mi código es el siguiente

page = open(url) {|f| f.read } 
page_array = page.scan(/regex/) #pulls partial urls into an array 
partial_url = page_array[0].to_s 
full_url = base_url + partial_url #adds each partial url to a consistent base_url 
puts full_url 

lo que quiero llegar es así:

http://www.stackoverflow/["questions"] 
+2

Qué hay en su 'array'? Y de qué versión de Ruby estás hablando (hay una diferencia aquí entre 1.8 y 1.9) – Amadan

+0

Muéstranos la definición de tu matriz –

+0

Pon eso en tu pregunta; eso es ilegible –

Respuesta

2

Es necesario que nos muestran la expresión regular para fijar realmente esto correctamente, pero esto va a hacer que:

Reemplazar esta

partial_url = page_array[0].to_s 

con este

partial_url = page_array[0][0] 
+0

¡Gracias! Eso lo hizo. Pero tienes razón, fue un problema de expresiones regulares. – user1144553

1

Esto no significa necesariamente fijar qué que está recibiendo una matriz duplicado en marcha, pero se puede aplanar y luego llamar al primer elemento de esta manera.

page_array = page.scan(/regex/).flatten 

aplanamiento se lleva a cabo matrices apiladas y crea un nivel, así que si tenía [1,2,[3,[4,5,6]]] y llamó a aplanar en él, se llega a [1,2,3,4,5,6]

También es más robusto que hacer array[0][0], ya que, si tuviera más de dos matrices anidadas en el primer elemento, se encontraría con el mismo problema.

Iain es correcto, sin embargo, sin ver la expresión regular, no podemos determinar la causa raíz.

12

to_s es solo un alias para inspeccionar para la clase Array.

No es que esto signifique mucho más que en lugar de esperar que array.to_s devuelva una cadena, en realidad está devolviendo una matriz. Consulte que, según el nombre del método, no es realmente lo que está buscando.

Si desea sólo el intento "agallas":

page_array.join 

Si hay varios elementos a la matriz:

Esto hará que:

page_array = ["test","this","function"] 

de retorno:

"test this function" 

Lo que "to_s" en una matriz devuelve, depende de la versión de Ruby que esté utilizando como se mencionó anteriormente. 1.9.X devuelve:

"[\"test\"]" 
20

Esta impresión la matriz como es sin paréntesis

array.join(", ") 
Cuestiones relacionadas