字符串赋值不正常

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

您得到两个不同的对象,但内容相同。