我會嘗試用一個簡單的例子來說明這個問題的對象標識:更改形式參數
def enclose(x)
[x]
end
在我的應用程序,enclose
做更復雜的東西,但在本質上它返回一個數組,內容其中完全由參數x的值決定。我可以用它這樣的:
foo = 'abcd'
....
foo = enclose(foo)
現在我的問題:是否可以寫一個方法enclose!
,它只是通過其封閉的版本替換參數,這樣的例子可以寫成
foo = 'abcd'
....
enclose!(foo)
由於Ruby通過引用傳遞參數,我認爲這可能是可能的。天真的方法,
def enclose!(x)
x = [x]
end
不工作 - 我想這是因爲分配創建一個新的對象,並離開實際參數不變。
是否有辦法,我可以達到我的目標?我認爲在Smallalk中,會有一種方法become
這會改變對象的身份,但是在Ruby中我沒有發現類似的東西。
是不是'foo = enclose(foo)'你真正想要什麼? – Candide
這是一樣的(你可以從我的帖子中看到),只是我想提一下變量'foo'一次。我從'chomp!'的String方法'chomp'中接受了這個想法,但是使用了'String',它可以工作,因爲您可以在不更改String對象身份的情況下更改字符串的內容。在我的情況下,某些任意類型的值將被更改爲'Array'類型的值,現在我意識到這在Ruby中是不可能的。 – user1934428