# Ruby Module ## 模組建立方式 跟類別一樣,命名必須是常數 ```ruby= module ModuleName # ... end ``` 用include(引入)或extend(擴充)的方式引入模組 include範例: ```ruby= module Flyable def fly puts "i can fly" end end class Cat include Flyable #include引入Flyable模組,作用在實體方法 end kitty = Cat.new kitty.fly # "i can fly" 實體方法 ``` extend範例: ```ruby= module Flyable def fly puts "i can fly" end end class Cat extend Flyable #extend 擴充 Flyable模組,增加類別方法 end Cat.fly #類別方法 ``` ## 模組跟類別的差別 類別有繼承功能,但模組沒有 所以不能長這樣 ```ruby= module Flyable < SomeModule end ``` 模組不能實體化,所以也不能長這樣 ```ruby= module Flyable end wing = Flyable.new ``` ## 同名類別 namespace ```ruby= module A class Cat #在模組A中的Cat類別 end end module B class Cat #在模組B中的Cat類別 end end kitty = A::Cat.new #連名帶姓的呼叫 nancy = B::Cat.new ```