rubystringdelete-method

Ruby delete method (string manipulation)


I'm new to Ruby, and have been working my way through Mr Neighborly's Humble Little Ruby Guide. There have been a few typos in the code examples along the way, but I've always managed to work out what's wrong and subsequently fix it - until now!

This is really basic, but I can't get the following example to work on Mac OS X (Snow Leopard):

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

Output I'm expecting is:

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

Output I actually get is:

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

The delete! method doesn't seem to have had any effect.

Can anyone shed any light on what's going wrong here? :-\


Solution

  • The String.delete method (Documented here) treats its arguments as arrays and then deletes characters based upon the intersection of its arrays.

    The intersection of 2 arrays is all characters that are common to both arrays. So your original delete of gone.delete!("o", "r-v") would become

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

    There are no characters present in both arrays so the deletion would get an empty array, hence no characters are deleted.