我从这个问题中了解到,在实例方法中,self
是指类的当前实例。无论实例方法定义中有多少层方法或循环,这都是真的吗?
问问题
164 次
2 回答
5
一般来说,是的,尽管有一些元编程方法可以用 self 做一些奇怪的事情 - 例如,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 是输入方法时绑定的 self。尽管您可以传递获得不同绑定的块,self
但在 Ruby 中不会“意外”重新绑定。如需更有趣的阅读,您可以查看 ruby Binding类的文档。
于 2013-08-09T19:11:14.420 回答
0
是的 self 总是引用 self ,即调用方法/块的实例
于 2013-08-09T19:05:42.900 回答