这个问题的灵感来自于这个问题:Ruby:为什么这种使用地图的方式会抛出错误? https://stackoverflow.com/questions/41853364/ruby-why-does-this-way-of-using-map-throw-an-error/41853662?noredirect=1#comment70891676_41853662
有人指出了以下几点:
当与 ! 一起使用时,map 没有多大意义。方法。
您应该:
- 将地图与 gsub 一起使用
- 或者将每个与 gsub 一起使用!
有人可以解释这是为什么吗?
基础对象
这是一个以字符串作为元素的数组:
words = ['hello', 'world']
新阵列
如果您想要一个带有修改后的字符串的新数组,您可以使用map
with gsub
:
new_words = words.map{|word| word.gsub('o','#') }
p new_words
#=> ["hell#", "w#rld"]
p words
#=> ["hello", "world"]
p new_words == words
#=> false
原始字符串和原始数组不会被修改。
就地修改字符串
如果您想就地修改字符串,可以使用:
words.each{|word| word.gsub!('o','#') }
p words
#=> ["hell#", "w#rld"]
地图和gsub!
new_words = words.map{|word| word.gsub!('o','#') }
p words
#=> ["hell#", "w#rld"]
p new_words
#=> ["hell#", "w#rld"]
p words == new_words
#=> true
p new_words.object_id
#=> 12704900
p words.object_id
#=> 12704920
这里,创建了一个新数组,但元素是完全相同的!
它并没有带来比前面的例子更多的东西。它无缘无故地创建了一个新数组。它还可能会通过发送相反的信号来迷惑阅读您代码的人:
-
gsub!
将表明您要修改现有对象
-
map
将表明您不想修改现有对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)