2010-04-25 8 views
5

Sono un neofita di Ruby e mi sto facendo da guida con Humble Little Ruby Guide di Mr Neighborly. Ci sono stati alcuni errori di battitura negli esempi di codice lungo la strada, ma sono sempre riuscito a capire cosa c'è che non va e quindi a correggerlo - fino ad ora!Ruby delete method (manipolazione delle stringhe)

Questo è veramente essenziale, ma non riesco a ottenere il seguente esempio di lavorare su Mac OS X (Snow Leopard):

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

uscita mi aspetto è:

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

L'output che ottengo effettivamente è:

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

L'eliminazione! il metodo non sembra aver avuto alcun effetto.

Qualcuno può far luce su cosa sta andando storto qui? : - \

risposta

9

Procedimento String.delete (Documented here) accoglie i suoi argomenti come array e quindi cancella caratteri basati sul intersezione dei suoi array.

L'intersezione di 2 matrici è tutti i caratteri comuni a entrambi gli array. Così il vostro originale eliminare del gone.delete!("o", "r-v") diventerebbero

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

Non ci sono personaggi presenti in entrambi gli array così la cancellazione otterrebbe un array vuoto, quindi nessun carattere vengono cancellati.

+0

Un altro errore di battitura agli esempi nel libro allora. ;-) Grazie mille per la spiegazione. – Brian

1

È possibile ottenere lo stesso o/p utilizzando qualche modo diverso, come gsub

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

o/p

deleted: Got gone fool! 
+0

Strano, non è vero? Anche tu sei su MAC OS X? – Brian

2

ho cambiato

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

a

gone.delete!("or-v") 

e funziona perfettamente.

+0

Grazie mille! Ho provato praticamente tutto tranne quello! Interessante, sei anche su MAC OS X? – Brian

+0

No. Io uso ruby ​​su Windows e Linux. La maggior parte dei ruby ​​dovrebbe essere agnostica del sistema operativo e quindi qualsiasi problema iniziale che dovresti affrontare non dovrebbe essere specifico per OS X. –

+0

Attenzione all'espansione quando si usano le doppie virgolette: http://stackoverflow.com/a/4190812/1729094 – yPhil

Problemi correlati