字符串赋值不正常
String assignment does not work properly
我正在尝试编写一个函数,它接受一个字符串并获取所需的索引并对字符串进行打乱:
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
放在等式的左侧,我不希望它被改变。
你需要 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
您得到两个不同的对象,但内容相同。
我正在尝试编写一个函数,它接受一个字符串并获取所需的索引并对字符串进行打乱:
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
放在等式的左侧,我不希望它被改变。
你需要 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
您得到两个不同的对象,但内容相同。