Array.reject!, как именно это работает?

Сегодня я сделал очень маленький ruby-скрипт, который использует регулярные выражения для отслеживания определенного содержимого в файлах с определенным именем и удаляет это содержимое перед добавлением замены. (Иначе что-то пойдет не так во время итераций ).

Я не очень привык к рубину (только с тех пор, как начал работать в отпуске, а это 1 -2 недели назад ), но одна из моих привычек — не трогать списки (или большинство других АТД. использование индексов )при переборе их (для удаления определенного контента ), не имеет значения, какой язык я использую.

После некоторых поисков я узнал о нескольких Arrayфункциях, которые могут помочь. Прямо сейчас я использую Array.reject!, и скрипт работает так, как я хочу, но я, честно говоря, не могу понять, почему у Array.reject! {|line| line =~ regex }нет проблем с пропуском объектов в массиве. Эти источники, ruby ​​-docs и какой-то случайный веб-сайт , подтверждают, что изменения применяются мгновенно во время итерации, что заставляет меня задаться вопросом, как это не беспорядок up... Удаляемые строки не имеют пробелов/слов между ними, только \nпереносит следующую строку на свою собственную строку, конечно (но это только часть конца строк ).

У кого-нибудь есть отличное объяснение этому?

5
задан Kevin 6 February 2014 в 04:32
поделиться