2010-12-08 48 views
1

基於this blog水龍頭的作品是這樣的,我同意。爲什麼我沒有得到錯誤當自己被分配的東西

class Object 
    def tap 
    yield self 
    self 
    end 
end 

這裏是我的實驗

class Lab 
end 

puts Lab.new.tap {|e| e = 'Boom' } 

在上述情況下,因爲我試圖改變自我的價值,然後紅寶石應該炸掉。但它不會炸燬。

下面給出的是改變自我的嘗試吹起來的情況。所以我的問題是爲什麼紅寶石沒有在上述情況下爆炸。

class Lab 
    def lab 
    puts self 
    self = 'Boom' #=> exception Can't change the value of self 
    puts self 
    end 
end 
+1

可能的重複[是Ruby通過引用還是按值傳遞?](http://stackoverflow.com/questions/1872110/is-ruby-pass-by-reference-or-by-value) – 2010-12-08 17:25:17

回答

4

的原因是一樣的,爲什麼self不在此代碼snipplet分配到的原因:

hello = self 
hello = 'foo' 

e是變量,指派別的東西,它只是分配別的東西給它,它不影響的當前值

+0

是一個克隆自我?由於紅寶石使用通過引用,那麼我會認爲改變e會改變自我。 – 2010-12-10 05:21:18

2

但你不分配self,你分配一個局部變量e。當該塊打開時,e指的是傳入的對象self。然後e被重新分配以引用String實例。

相關問題