Ruby 为什么<&书信电报;和+;=构建不同的字符串?

Ruby 为什么<&书信电报;和+;=构建不同的字符串?,ruby,string,Ruby,String,我编写了一个函数,它逐个字符地迭代字符串,使用每个字符作为键从散列中提取值。散列中的值用于构建新字符串: acc = '' str.each_char do |c| acc << somehash[c] end 它的行为是正确的。 为什么我从s1获得不同的行为使用相同的字符串,str=str+'a'将结果重新分配给新创建的字符串对象。我不知道,你的代码是如何产生你描述的行为的。老实说,我会使用acc=str.chars.map{{c|somehash[c]}。join它更干净,

我编写了一个函数,它逐个字符地迭代字符串,使用每个字符作为键从散列中提取值。散列中的值用于构建新字符串:

acc = ''
str.each_char do |c|
  acc << somehash[c]
end
它的行为是正确的。
为什么我从
s1获得不同的行为使用相同的字符串,
str=str+'a'
将结果重新分配给新创建的字符串对象。我不知道,你的代码是如何产生你描述的行为的。老实说,我会使用
acc=str.chars.map{{c|somehash[c]}。join
它更干净,会产生相同的结果。或者更好的是,
acc=somehash.values\u在(*str.split(//)。加入
@mudasobwa是的,这就是我的想法。我一直使用“我很困惑,因为在继续编码几个小时后,我把电铲的开关调回,现在我的单元测试可以使用它了。”。我希望我知道原因,因为我没有改变循环的逻辑。
acc += somehash[c]
s1 = "ab"
s1.object_id #=> 70117580969460 
s2 = "cd"

s1 << s2     #=> "abcd" 
s1           #=> "abcd" 
s1.object_id #=> 70117580969460 
s1 = "ab"
s1.object_id #=> 70117576935280 
s2 = "cd"

s1 += s2     #=> s1 = s1 + s2 => "abcd" 
s1           #=> "abcd" 
s1.object_id #=> 70117576870900