2015-03-18 49 views
0

我是Ruby新手,對於編程來說很新。不知道爲什麼string [n] = temp [string.length-(n + 1)]會將temp更改爲字符串數組。是不是隻改變字符串數組?我一直在這個問題上4個小時,任何幫助將非常感激=)謝謝!Ruby函數中的字符串數組賦值

def reverse(string) 
    temp = string 
    n=0 
    while (string.length - n) > 0 
    string[n]=temp[string.length-(n+1)] 
    n+=1 
    end 
    return string 
end 

puts reverse("abc") 
+0

Temp和string是相同的對象。 – 2015-03-18 21:27:42

+0

@FrederickCheung,是一個參考而不是副本? – 2015-03-18 21:30:57

+0

如果我在'temp = string'之後加'puts'string.object_id ==#{string.object_id},temp.object_id ==#{temp.object_id}'',當我執行'reverse(「abc」)' ,將打印以下內容:'string.object_id == 70267640537340,temp.object_id == 70267640537340'。這是否告訴你什麼?你需要'temp = string.dup'(儘管我沒有看過你的其他代碼)。 – 2015-03-18 21:32:37

回答

0

tempstring是同一物體,因爲:

temp = string 

所以,string的任何變化將反映在temp。您可以複製字符串變量以避免此問題:

temp = string.dup 
+0

非常感謝。你們知道是否有任何文獻指導我對Ruby上的「=」賦值運算符進行教育。這與我以前使用變量的方式似乎有很大不同。再次感謝你! – n00b 2015-03-18 22:17:05

+0

@MarkThomas,我可以問什麼? – n00b 2015-03-19 05:42:15

+0

Upvote和接受。你已經完成了後者。 – 2015-03-19 13:16:42