【发布时间】:2015-07-29 04:18:25
【问题描述】:
我编写了一个函数,它逐个字符地迭代字符串,使用每个字符作为键从哈希中提取值。散列中的值用于构建新字符串:
acc = ''
str.each_char do |c|
acc << somehash[c]
end
如果字符串长于一个,则将查找第一个字符并将其哈希值插入到构建的字符串中多次,这不是我想要的。我用<< 重写了这一行
acc += somehash[c]
并且它的行为正确。
为什么我的行为与 << 和 += 不同?
注意:我不再出现这种行为,并且我的单元测试正在通过。我不知道为什么,因为我没有触及循环中的逻辑。
【问题讨论】:
-
String#<<使用相同的字符串,str = str + 'a'将结果重新分配给新创建的字符串对象。我无法意识到,您的代码如何产生您所描述的行为。 -
老实说,我会选择
acc = str.chars.map{|c| somehash[c]}.join,它更干净,并且会产生相同的结果。或者更好acc = somehash.values_at(*str.split(//)).join -
@mudasobwa 是的,我就是这么想的。直到今天我的单元测试发现了奇怪的插值时,我一直很高兴地使用 '
-
我很困惑,因为在继续编码几个小时后,我切换回了铲子,现在我的单元测试很好。我希望我知道原因,因为我没有改变循环的逻辑。