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