2010-04-25 13 views
5

Soy nuevo en Ruby, y he seguido mi camino a través de la Guía Humble Little Ruby de Mr Neighborly. Ha habido algunos errores tipográficos en los ejemplos de código a lo largo del camino, pero siempre he logrado averiguar qué es lo que está mal y, posteriormente, solucionarlo, ¡hasta ahora!Método de eliminación de Ruby (manipulación de cadenas)

Esto es muy básico, pero no puede obtener el siguiente ejemplo para trabajar en Mac OS X (Leopard):

gone = "Got gone fool!" 
puts "Original: " + gone 
gone.delete!("o", "r-v") 
puts "deleted: " + gone 

salida que estoy esperando es:

Original: Got gone fool! 
deleted: G gne fl! 

La salida que realmente obtengo es:

Original: Got gone fool! 
deleted: Got gone fool! 

¡La eliminación! método no parece haber tenido ningún efecto.

¿Alguien puede arrojar algo de luz sobre lo que está mal aquí? : - \

Respuesta

9

El String.delete método (Documented here) trata a sus argumentos como matrices y luego elimina caracteres basados ​​en el intersección de sus arrays.

La intersección de 2 matrices son todos los caracteres que son comunes a ambas matrices. Así que el original de borrar gone.delete!("o", "r-v") se convertiría en

gone.delete ['o'] & ['r','s','t','u','v'] 

No hay personajes presentes en ambas matrices por lo que la eliminación obtendría una matriz vacía, por lo tanto, no se elimina ningún caracteres.

+0

Otro error tipográfico catalogado a los ejemplos en el libro entonces. ;-) Muchas gracias por la explicación. – Brian

1

Se obtiene misma o/p usando alguna forma diferente como gsub

puts "deleted: " + gone.gsub('o', '') 

O/P

deleted: Got gone fool! 
+0

Extraño, ¿verdad? ¿Estás en MAC OS X también? – Brian

2

he cambiado

gone.delete!("o", "r-v") 

a

gone.delete!("or-v") 

y funciona bien.

+0

¡Muchas gracias! ¡Intenté casi todo menos eso! Fuera de interés, ¿también utiliza MAC OS X? – Brian

+0

No. Uso Ruby en Windows y Linux. La mayor parte de Ruby debe ser independiente del sistema operativo, por lo que los problemas iniciales a los que se enfrenta no deben ser específicos de OS X. –

+0

Tenga cuidado con la expansión al usar comillas dobles: http://stackoverflow.com/a/4190812/1729094 – yPhil

Cuestiones relacionadas