我在这里编写本教程:
课程是关于类/元类的,但它们使用的是我不熟悉的语法.请参阅使用<
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的屏幕演员系列.