为什么我在自我被分配的时候没有得到错误

时间:2010-12-08 17:23:55

标签: ruby

基于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

2 个答案:

答案 0 :(得分:4)

原因与此代码片段中未分配self的原因相同:

hello = self
hello = 'foo'

e只是一个变量,为其分配其他内容只是为其分配其他内容,它不会影响 e的当前值

答案 1 :(得分:2)

但是您没有分配self,而是要分配本地变量e。当块打开时,e引用传入的对象self。然后重新分配e以引用String实例。