2010-04-25 14 views
5

Ich bin neu in Ruby und arbeite mich durch Mr Neighborles Humble Little Ruby Guide. Es gab ein paar Tippfehler in den Codebeispielen, aber ich habe es immer geschafft, herauszufinden, was falsch ist, und es anschließend zu beheben - bis jetzt!Ruby-Löschmethode (String-Manipulation)

Das ist wirklich einfach, aber ich kann das folgende Beispiel funktioniert auf Mac OS X (Snow Leopard) nicht bekommen:

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

Ausgang I erwartet habe, ist:

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

Ausgabe, die ich tatsächlich bekomme ist:

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

Die löschen! Methode scheint keine Wirkung zu haben.

Kann jemand Licht auf das werfen, was hier falsch läuft? : - \

Antwort

9

Die String.delete Methode (Documented here) behandelt seine Argumente als Arrays und löscht dann Zeichen, basierend auf der Kreuzungs seiner Arrays.

Der Schnittpunkt von 2 Arrays sind alle Zeichen, die beiden Arrays gemeinsam sind. So Ihre Original löschen von gone.delete!("o", "r-v")

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

Es gibt keine Zeichen in beiden Arrays werden würde, so dass die Löschung ein leeres Array erhalten würde, daher werden keine Zeichen gelöscht.

+0

Ein weiterer Tippfehler wurde gemeldet zu den Beispielen im Buch dann. ;-) Vielen Dank für die Erklärung. – Brian

1

Sie erhalten gleiche o/p etwas andere Art und Weise wie gsub

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

o/p

deleted: Got gone fool! 
+0

Seltsam, nicht wahr? Sind Sie auch auf MAC OS X? – Brian

2

I

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

zu

gone.delete!("or-v") 
mit

und es funktioniert gut.

+0

Vielen Dank! Ich habe fast alles Mögliche versucht! Interessieren Sie sich auch für MAC OS X? – Brian

+0

Nein. Ich benutze Ruby auf Windows und Linux. Der größte Teil von Ruby sollte OS-agnostisch sein und daher sollten anfängliche Probleme, denen Sie gegenüberstehen, nicht spezifisch für OS X sein. –

+0

Vorsicht bei der Erweiterung bei doppelten Anführungszeichen: http://stackoverflow.com/a/4190812/1729094 – yPhil