欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Ruby 元编程 第二版随笔(三)

程序员文章站 2022-07-15 20:07:29
...

 

   执行方法

   method execution

 

         调用方法时,Ruby要做两件事:首先找到这个方法,然后执行这个方法。到目前为止,我们只学会了如何找到这个方法,接下来看看如何执行方法。

 

         假设我们自己就是Ruby解释器,现在调用了一个名叫my_method的方法,我们先找到方法,发现该方法定义如下:

         

def my_method
  temp = @x + 1
  my_other_method(temp)
end

         为了执行这个方法,需要知道两个地方。 首先,实例变量@x属于那个对象?其次,应该在那个对象上调用方法my_other_method?

         我们凭直觉就能知道:@x实例变量和 my_other_method方法都属于接受者----那个最初调用,my_method方法的对象。 不过, Ruby可没有那么强的直觉。调用方法时,Ruby需要持有一个接收者的引用,正式由于这个引用,Ruby才知道那个是接收者,再用它来执行这个方法。

 

self关键字

 

         Ruby的每一行代码都会在一个对象中被执行------这个对象就是所谓的当前对象。当前对象也可以用self表示,因为可以用self关键字来对它进行访问。

 

         任何时刻,只有一个对象能充当当前对象,而且没有那个对象能够长期充当这个角色。调用一个方法时,接收者就成为self。从这一刻起所有的实例变量都是self 的实例变量,所有没有明确指明接收者的方法都在self上调用。一旦代码转而调用其他对象的方法,这个对象就成为了self。

        

class MyClass
  def testing_self
    @var = 10           #self的一个实例变量
    my_method()      #与self.my_method()相同
    self
  end

  def my_method
    @var = @var + 1
  end
end

  

obj = MyClass.new
obj.testing_self      # => #<MyClass:0x007f93ab08a728 @var=11>

          调用testing_self方法时,接收者obj就成为self。因此,实例变量@var就是obj 的实例变量,而且my_method方法也在obj上被调用。在my_method方法执行期间,self还是obj,因此@var还是obj对象的实例变量。最后,testing_self方法返回self的引用(@var=11)

相关标签: ruby 方法