ruby – 什么是<

我在这里编写本教程:

http://rubymonk.com/learning/books/4-ruby-primer-ascent/chapters/39-ruby-s-object-model/lessons/131-singleton-methods-and-metaclasses

课程是关于类/元类的,但它们使用的是我不熟悉的语法.请参阅使用<

class Object
  def metaclass
    class << self
      self
    end
  end
end


a=Object.new
p a.metaclass.new

我知道def元类是一种方法,但是什么是类<

最佳答案 class<< self打开self的singleton类,以便可以为当前的self对象重新定义方法. 让我们看一个特定的例子:

 s = String.new("abc")
 s.metaclass
   => "#<Class:#<String:0x0000010117e5d8>>" 

让我们仔细看看这里发生的事情:

>在metaclass的定义中,self指的是当前实例,在本例中是字符串“abc”.
> class< >然后在当前实例的打开类中返回self – 打开的类在示例中是String类.

通常,元类的定义打开给定实例/对象的类的类定义,然后返回该类名.

在Yehuda Katz的文章“Metaprogramming in Ruby: It’s All About the Self”中可以找到更详细的“自我”.

我还推荐Pragmatic Programmers on The Ruby Object Model and Metaprogramming的屏幕演员系列.

点赞