self总是引用实例方法定义中的当前实例吗?

时间:2013-08-09 19:03:11

标签: ruby oop

我从这个question了解到,在实例方法中,self引用了类的当前实例。无论你在实例方法定义中有多少层方法或循环,这都是真的吗?

2 个答案:

答案 0 :(得分:5)

通常,是的,虽然有一些元编程方法可以用自己做一些奇怪的事情 - 例如,Object#instance_eval允许你传递一个块来在另一个实例的上下文中进行评估。在这种情况下,块中的self是另一个实例的self,如下所示:

class Foo
end

class Bar
  def wacky
    puts self.class #"Bar"
    Foo.new.instance_eval do
      puts self.class #"Foo"
    end
  end
end

如果没有仔细阅读,您可能会想到块中的self引用了Bar实例,但事实并非如此。

所以你看,在大多数情况下,你可以假设自我是进入方法时受约束的自我。虽然你能够传递块来获得不同的绑定,但self不会在Ruby中“偶然”重新绑定。有关更有趣的阅读,您可以查看ruby Binding类文档。

答案 1 :(得分:0)

是的,self总是引用self,即在

上调用方法/块的实例