Метод удаления Ruby (манипулирование строками) - PullRequest
6 голосов
/ 25 апреля 2010

Я новичок в Ruby, и я пробираюсь через Справочник Мистера Соседнего Младшего Рубина. Было несколько опечаток в примерах кода, но мне всегда удавалось разобраться, что не так, и впоследствии исправить это - до сих пор!

Это действительно просто, но я не могу заставить следующий пример работать на 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!

Удалить! метод, кажется, не имел никакого эффекта.

Может кто-нибудь пролить свет на то, что здесь происходит не так? : - \

Ответы [ 3 ]

10 голосов
/ 25 апреля 2010

Метод String.delete ( Документированный здесь ) обрабатывает свои аргументы как массивы, а затем удаляет символы на основе пересечения его массивов.

Пересечение 2 массивов - это все символы, которые являются общими для обоих массивов. Таким образом, ваше первоначальное удаление gone.delete!("o", "r-v") станет

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

В обоих массивах нет символов, поэтому при удалении будет получен пустой массив, следовательно, символы не будут удалены.

2 голосов
/ 25 апреля 2010

я изменил

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

до

gone.delete!("or-v")

и работает нормально.

1 голос
/ 25 апреля 2010

Вы получаете тот же o / p, используя другой способ, например gsub

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

о / р

deleted: Got gone fool!
...