1. 程式人生 > >ruby gem metaid 原始碼閱讀

ruby gem metaid 原始碼閱讀

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我,先做鋪墊了。先把程式碼的意思弄明白,再慢慢找原理。