Я плохо знаком с Ruby и прокладывал себе путь через Скромное Маленькое Руководство Ruby г-на Neighborly. Было несколько опечаток в примерах кода по пути, но мне всегда удавалось удаться что случилось и впоследствии зафиксировать его - до сих пор!
Это является действительно основным, но я не могу заставить следующий пример работать над Mac OS X (Snow Leopard):
gone = "Got gone fool!"
puts "Original: " + gone
gone.delete!("o", "r-v")
puts "deleted: " + gone
Вывод, который я ожидаю:
Original: Got gone fool!
deleted: G gne fl!
Вывод, который я на самом деле получаю:
Original: Got gone fool!
deleted: Got gone fool!
Удаление! метод, кажется, не имел эффекта.
Кто-либо может пролить какой-либо свет на то, что идет не так, как надо здесь?:-\
Метод String.delete
( Документированный здесь ) обрабатывает свои аргументы как массивы, а затем удаляет символы на основе пересечение его массивов.
Пересечение двух массивов - это все символы, общие для обоих массивов. Таким образом, ваше исходное удаление пропало.delete! ("O", "rv")
превратилось бы в
gone.delete ['o'] & ['r','s','t','u','v']
В обоих массивах нет символов, поэтому при удалении будет получен пустой массив, следовательно, символы не будут удалено.
Вы получаете то же значение o / p, используя другой способ, например gsub
puts "deleted: " + gone.gsub('o', '')
o / p
deleted: Got gone fool!
Я изменил
gone.delete!("o", "r-v")
на
gone.delete!("or-v")
и все работает нормально.