在 camping.rb 的第一行之一:https://github.com/camping/camping/blob/ae5a9fabfbd02ba2361ad8831c15d723d3740b7e/lib/camping-unabridged.rb#L17,
框架将meta_def
方法添加到Object
类中。我一直在玩这段代码,但我仍然无法理解它在做什么。
class Object #:nodoc:
def meta_def(m,&b) #:nodoc:
(class<<self;self end).send(:define_method,m,&b)
end
end
当我尝试这样打印时(class<<self;self end)
:
class Object #:nodoc:
def meta_def(m,&b) #:nodoc:
puts (class<<self;self end)
end
end
puts 'a'.meta_def 'boo'
它打印出来#<Class:#<String:0x146810>>
,这意味着它正在创建一个Class
. 但是,我仍然不知道它到底是什么以及做了什么(class<<self;self end)
。有人可以解释这是如何工作的吗?