module 一個最簡單的module include 在class使用include, 可以讓module內的方法為class的物件方法,在ruby稱為mixin include可用在模擬多重繼承,因Ruby不像C++可以直接多重繼承,所以宣告為module,在mixin到class裡面 extend 在class使用extend,可以讓module內的方法為class的類別方法 與include的不同點在於 include: module內的方法為class的物件方法 extend: module內的方法為class的類別方法 module Foo def foo puts 'foo' end end class Bar extend Foo end Bar.foo # 印出hello foo (foo已成為Bar的類別法) self in module self是什麼?就是呼叫Ruby當前物件本身指標所指的,在主程序直接呼叫self返回main。 先看最簡單的module module Foo end 直接呼叫self會出現什麼呢? module Foo p self #印出 Foo end 別忘了ruby式腳本式的語言,這個程式沒寫錯,單純只是宣告module,他裡頭的命令句還是被執行,所以印出Foo 那麼這個Foo物件是什麼?簡單,印出來看看 module Foo p self.class #印出Module end 非常清楚,Ruby號稱所有東西都是物件,所以module也是物件,所以self的使用很清楚了,直接動態的在Foo物件上面加上方法 module Foo def self.foo puts 'hello foo' end end Foo.foo # 印出hello foo, 直接呼叫Foo這個Module形態的物件,裡頭的foo方法 所以同理,class裡面的self也是一樣的應用,class也是可以實體化為物件,並動態的加上方法,通常稱為類別方法,這種類別方法,在其他程式語言裡面也很常用,只是實作方式不同,Ruby是把class也當作物件處理 extend self 綜合上面所說的,如果m...