2015-06-18 58 views
0

由於某種原因,字符串正在通過操作鏡像[j] = string [i]被重寫爲鏡像Ruby字符串數組覆蓋自己?

我不知道爲什麼會出現這種情況,我並不指揮它。我的反向(串)函數的輸出將停止在中間,如: 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 
+1

你不能只使用ruby字符串API爲此?像str1.reverse – rxing

回答

4

您需要使用#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" 
+0

我會upvote,但我不能,因爲我還沒有15點聲望點!謝謝! –

+1

@TomMercer但你可以接受答案:) –

+0

另一種選擇是不重複字符串,但附加 - 連接'<<'字符到鏡像 –