Будучи студентом второго модуля учебного курса по иммерсивной разработке программного обеспечения в школе Flatiron, я все время узнаю что-то новое. Вдобавок я заметил, что мне очень нравится играть в то, что один из моих инструкторов назвал «Рубиновым гольфом», в котором я заметил, что стараюсь писать свои решения и методы, используя как можно меньше строк кода. Обычно это приводит к тому, что я использую (иногда) менее очевидные методы для достижения тех же целей, которые я (иногда) мог бы написать быстрее, но в большем количестве строк. В своей цели я застрял, но затем наткнулся на метод gsub.

Впервые я столкнулся с методом gsub во время обязательной предварительной работы на буткемпе. Однако во время лабораторной работы по подсчету предложений во время моего первого модуля я понял, насколько мощным инструментом это может быть.

Когда я изначально писал это, я понял, что это избавило меня от написания целой кучи условных операторов, которые могли бы стать чрезвычайно беспорядочными, или мне пришлось бы жестко закодировать крайние случаи, которые исходный файл спецификации использовал для тестирования Это.

Как это работает:

Метод gsub работает со строками в Ruby. Для тех из вас, кто не знаком с тем, как работает gsub, он принимает аргумент, обычно в виде регулярного выражения, а затем заменяет любой символ, выбранный первым аргументом. Сюда могут входить разрывы строк, пробелы, специальные символы и т. Д., Если вы знаете соответствующее регулярное выражение для нужного символа. Регулярное выражение также позволяет эффективно выбирать несколько символов.

Затем он принимает второй аргумент в виде строки или хеша. Если это строка, то он заменит все выбранные символы одним символом в строке. Если это хэш, каждый ключ представляет собой один из выбранных символов в форме строки, причем значение каждого ключа соответствует тому, на что заменяется символ.

Возвращаемое значение .gsub будет строкой со всеми сделанными заменами. Однако это не изменяет исходную строку, если она была сохранена в переменной. Это означает, что если вам нужно возвращаемое значение для использования в другом методе, тогда последующие методы должны быть связаны цепочкой или возвращаемое значение нужно будет присвоить переменной. Это возвращаемое значение отличается, когда .gsub вызывается как .gsub !. С .gsub возвращается исходная строка со всеми сделанными заменами. Это включает в себя, если метод не выполняет никаких замен. С другой стороны, .gsub! возвращает nil, если никаких подстановок не требуется, а в остальном работает так же, как .gsub. Это может быть полезно, если вы передаете его нескольким строкам и не хотите просеивать все очень похожие результаты, чтобы найти строки, не отвечающие требованиям замены. Кроме того, если методу не предоставлен блок или второй аргумент, возвращаемым значением будет перечислитель.

Я нашел этот метод невероятно полезным, поскольку он позволил мне просто вызвать несколько методов в строке вместо того, чтобы писать программу из 10–20 строк, которую было бы сложно написать и отладить должным образом. Однако у него есть ограничения. Использование split с похожим регулярным выражением, например, как показано ниже, является более эффективным способом получения того же результата, что и в моем исходном коде, при попытке сделать что-то вроде подсчета предложений в строке.

Источник: https://ruby-doc.org/core-2.3.3/String.html#method-i-gsub