Ruby 字符串数组覆盖自己?

Ruby String Arrays Overwriting Themselves?

出于某种原因,字符串被 mirror[j] = string[i]

操作重写为镜像

我不知道为什么会这样,我没有命令它这样做。我的 reverse(string) 函数的输出将在中间停止,例如: ABCDEF -> FEDDEF 但我正在尝试这样做: ABCDEF -> FEDCBA

def reverse(string)
  mirror = string
  i = string.length - 1
  j = 0
  while j < string.length
    mirror[j] = string[i]
    puts(mirror)
    j = j + 1
    i = i - 1
  end
  return mirror
end

您需要使用 #dup。在您的情况下, mirror = string 表示两个变量都持有同一对象的引用。因此,当您更改对象时,可以通过 stringmirror.

反映出来
def reverse(string)
  mirror = string.dup
  i = string.length - 1
  j = 0
  while j < string.length
    mirror[j] = string[i]
    j += 1  # same as j = j + 1
    i -= 1  # same as i = i - 1
  end
  mirror 
  # last expression is returned by default, so you can write only  `mirror` instead of `return mirror`
end

p reverse 'ABCDEF' # "FEDCBA"