我从这个question了解到,在实例方法中,self
引用了类的当前实例。无论你在实例方法定义中有多少层方法或循环,这都是真的吗?
答案 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,即在
上调用方法/块的实例