【问题标题】:String assignment does not work properly字符串赋值不能正常工作
【发布时间】:2016-07-14 08:29:25
【问题描述】:

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

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

当我调用上述方法时,“字符串”发生了变化,您将在puts 的输出中看到。

为什么会发生这种情况,因为我没有将 string 放在等式的左侧,我不希望它被改变。

【问题讨论】:

标签: ruby string indices


【解决方案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

如需更多了解,请尝试以下 sn-p:

  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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    相关资源
    最近更新 更多