字符串赋值无法正常工作

时间:2016-03-26 18:43:30

标签: ruby string indices

我正在尝试编写一个函数,它接受一个字符串并获取所需的索引并对字符串进行加密:

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放在等式的左边,我不希望它被改变。

1 个答案:

答案 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

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