2012-05-25 20 views
2

爲什麼變量var傳遞給函數執行後更改的以下代碼中的函數?Ruby:傳遞給函數的變量得到更改

def my_func(my_var) 
    out_var = my_var 
    out_var[3]="STUFF" 
    return out_var 
end 

var = "Testing" 
puts my_func(var) 
puts var 

輸出:

TesSTUFFing 
TesSTUFFing 

爲什麼 「VAR」 被改變?有人可以向我解釋這個嗎?

回答

8

在Ruby中,變量通過引用傳遞。

你必須明確地克隆變量:

def my_func(my_var) 
    out_var = my_var.clone 
    out_var[3]="STUFF" 
    out_var 
end 
+0

謝謝!正是我需要知道的。 –

2

字符串都不是一成不變的在Ruby中,這樣你就可以通過一個字符串修改該字符串的函數。