2010-04-25 7 views
5

Je suis nouveau à Ruby, et j'ai travaillé mon chemin à travers Guide Humble Little Ruby de M. Neighborly. Il y a eu quelques fautes de frappe dans les exemples de code en cours de route, mais j'ai toujours réussi à trouver ce qui ne va pas et à le réparer ensuite - jusqu'à maintenant!Méthode de suppression Ruby (manipulation de chaînes)

C'est vraiment basique, mais je ne peux pas obtenir l'exemple suivant pour travailler sur Mac OS X (Snow Leopard):

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

sortie Je me attends est:

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

La sortie que je reçois réellement est:

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

La suppression! méthode ne semble pas avoir eu d'effet.

Quelqu'un peut-il faire la lumière sur ce qui ne va pas ici? : - \

Répondre

9

Procédé String.delete (Documented here) traite ses arguments sous forme de tableaux, puis supprime les caractères sur la base de l'intersection de ses tableaux.

L'intersection de 2 tableaux est l'ensemble des caractères communs aux deux tableaux. Donc, original supprimer des gone.delete!("o", "r-v") deviendrait

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

Il n'y a pas de caractères présents dans les deux tableaux de sorte que la suppression obtiendrait un tableau vide, donc pas de caractères sont supprimés.

+0

Une autre faute de frappe aux exemples dans le livre alors. ;-) Merci beaucoup pour l'explication. – Brian

1

Vous obtenez même o/p en utilisant une autre façon comme gsub

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

o/p

deleted: Got gone fool! 
+0

Etrange, n'est-ce pas? Êtes-vous sur MAC OS X, aussi? – Brian

2

J'ai changé

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

à

gone.delete!("or-v") 

et cela fonctionne bien.

+0

Merci beaucoup! J'ai essayé à peu près tout sauf ça! Par intérêt, êtes-vous sur MAC OS X, aussi? – Brian

+0

Non. J'utilise ruby ​​sur windows et linux. La plupart des ruby ​​devraient être agnostiques et donc tous les problèmes initiaux auxquels vous faites face ne devraient pas être spécifiques à OS X. –

+0

Attention à l'expansion lors de l'utilisation de guillemets doubles: http://stackoverflow.com/a/4190812/1729094 – yPhil