我正在尝试编写一个函数,它接受一个字符串并获取所需的索引并对字符串进行加密:
def scramble_string(string, positions)
temp = string
for i in 0..(string.length-1)
temp[i] = string[positions[i]]
end
puts(string)
return temp
end
当我调用上述方法时,“string”会被更改,您将在puts
的输出中看到。
为什么会发生这种情况,因为我没有将string
放在等式的左边,我不希望它被改变。
答案 0 :(得分:1)
您需要string.dup
:
def scramble_string(string, positions)
temp = string.dup
for i in 0..(string.length-1)
temp[i] = string[positions[i]]
end
puts(string)
return temp
end
要了解更多信息,请尝试以下代码段:
string = 'a'
temp = string
puts string.object_id
puts temp.object_id
两个相同的对象id的结果,换句话说,两个变量都是同一个对象。
使用:
string = 'a'
temp = string.dup
puts string.object_id
puts temp.object_id
puts string.object_id == temp.object_id #Test for same equal -> false
puts string.equal?( temp) #Test for same equal -> false
puts string == temp #test for same content -> true
你得到两个不同的对象,但内容相同。