1

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

4

2 回答 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 回答