基于this blog点击工作,我同意这样的事情。
class Object
def tap
yield self
self
end
end
这是我的实验
class Lab
end
puts Lab.new.tap {|e| e = 'Boom' }
在上述情况下,因为我试图改变自我的价值,所以红宝石应该爆炸。但它并没有爆炸。
以下是试图改变自我的情况。所以我的问题是为什么ruby在上述情况下不会爆炸。
class Lab
def lab
puts self
self = 'Boom' #=> exception Can't change the value of self
puts self
end
end
答案 0 :(得分:4)
原因与此代码片段中未分配self
的原因相同:
hello = self
hello = 'foo'
e
只是一个变量,为其分配其他内容只是为其分配其他内容,它不会影响 e的当前值。
答案 1 :(得分:2)
但是您没有分配self
,而是要分配本地变量e
。当块打开时,e
引用传入的对象self
。然后重新分配e
以引用String实例。