ruby gem metaid 源码阅读
metaid.rb的代码不长,如下
class Object
# The hidden singleton lurks behind everyone
def metaclass; class << self; self; end; end
def meta_eval &blk; metaclass.instance_eval &blk; end
# Adds methods to a metaclass
def meta_def name, &blk
meta_eval { define_method name, &blk }
end
# Defines an instance method within a class
def class_def name, &blk
class_eval { define_method name, &blk }
end
end
我看了《ruby元编程》后,对之有一些理解,但第一次看代码,还是有些迷糊。
静下心来,慢慢读,然后打开irb进行测试,才有了一些体会。
打开irb
require 'metaid'
为防止错误,我再做试验一次。
a="ok"
a.metaclass
此处,可以看到该方法调用的结果。显示单件类。
a.meta_eval {a="hello"}
把self当成a
a.meta_def :h1 do ; puts "hello2"; end
添加方法到单件类中
class T1
class_def :m1 do; puts "haha"; end
end
b=T1.new
b.m1
这里给类添加方法。
为了看camping.rb我,先做铺垫了。先把代码的意思弄明白,再慢慢找原理。