使用gsub的Ruby Regexp是否相当于self关键字?

Sin*_*ity 3 ruby regex arrays string self

例如,假设我想要一个字符串并为每个az字符添加1个值.我正在寻找具有类似语法的东西:

str = 'abc123'
str.gsub(/[a-z]/, self.next!)
Run Code Online (Sandbox Code Playgroud)

给出一个输出:bcd123我知道我可以使用一些代码,如:

irb(main):075:0> 'abc123'.split('').map{|x| if x =~ /[a-z]/ then x.next! else x = x end }.join
=> "bcd123"
Run Code Online (Sandbox Code Playgroud)

然而,这似乎相当草率,效率不高.我认为有一个更简洁的方法来完成同样的壮举.

提前致谢.

fal*_*tru 14

String#gsub接受一个可选块.块的返回值用作替换字符串.

str.gsub(/[a-z]/) { |x| x.next }
# => "bcd123"
Run Code Online (Sandbox Code Playgroud)

使用&:next语法的较短版本:

str.gsub(/[a-z]/, &:next)
# => "bcd123"
Run Code Online (Sandbox Code Playgroud)