Ruby Regexp, использующий gsub, есть ли эквивалент ключевого слова self?
Например, я хочу взять строку и добавить 1 значение к каждому символу az. Я ищу что-то с похожим синтаксисом:
str = 'abc123'
str.gsub(/[a-z]/, self.next!)
Вывод: bcd123 Я знаю, что мог бы использовать такой код, как:
irb(main):075:0> 'abc123'.split('').map{|x| if x =~ /[a-z]/ then x.next! else x = x end }.join
=> "bcd123"
Тем не менее, это выглядит довольно небрежно и не очень эффективно. Я бы подумал, что есть гораздо более аккуратный способ совершить тот же подвиг.
Заранее спасибо.
1 ответ
Решение
String#gsub
принимает необязательный блок. Возвращаемое значение блока используется в качестве строки замены.
str.gsub(/[a-z]/) { |x| x.next }
# => "bcd123"
Укороченная версия с использованием &:next
синтаксис:
str.gsub(/[a-z]/, &:next)
# => "bcd123"