为什么我没有得到错误当自己被分配的东西
问题描述:
基于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
答
的原因是一样的,为什么self
不在此代码snipplet分配到的原因:
hello = self
hello = 'foo'
e
是变量,指派别的东西,它只是分配别的东西给它,它不影响的当前值。
+0
是一个克隆自我?由于红宝石使用通过引用,那么我会认为改变e会改变自我。 – 2010-12-10 05:21:18
答
但你不分配self
,你分配一个局部变量e
。当该块打开时,e
指的是传入的对象self
。然后e
被重新分配以引用String实例。
可能的重复[是Ruby通过引用还是按值传递?](http://stackoverflow.com/questions/1872110/is-ruby-pass-by-reference-or-by-value) – 2010-12-08 17:25:17