# 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
```