---
# System prepended metadata

title: 說明Module與Class的差異在哪裡?
tags: [Ruby on Rails 觀念]

---

###### tags: `Ruby on Rails 觀念` 
# 說明Module與Class的差異在哪裡?


#### 直接破題就是 :
#### 1.模組不能被別的類別或是模組繼承，彼此是獨立關係
#### 2.模組不能產生實體物件

先簡單複習一下，Class 與 Module 的關係
```rb
module Jam
  def taste
    puts "有巧克力口味了!!"
  end
end

class Bread
  include Jam
end

toast = Bread.new
toast.taste
```

在 Bread 類別裡面並沒有定義 taste 這個方法，但藉由引入 Jam 這個模組就可以使 Bread 類別加上新方法，所以原味的 toast 就有了口味！!

### Module與Class看起來真的像極了，背後細節的差異在哪?


現在直接打開終端機( window 要在 WSL 執行)，依序輸入

```rb=
irb # 打開互動式 Ruby

Class.instance_methods - Module.instance_methods
```
![](https://i.imgur.com/lV5uc0Q.png)

instance_methods 可以叫出物件有哪些方法，兩者陣列相減後 Module 比 Class 少了三個實體方法，分別是 allocate、new、superclass，其中 new 和 allocate 與產生實體有關，而 superclass 與繼承有關。

### 什麼時候用 Module 還是 Class ?

白話來說，當今天在許多不同的 Class 類別中，會使用到一個特殊功能，那麼就可以建議把此功能做成一個 Module 模組，有需要的時候我們在引入它

#### 參考
[為你自己學Ruby on Rails](https://railsbook.tw/chapters/08-ruby-basic-4#module)
[關於模組(Module)](https://ithelp.ithome.com.tw/articles/10192295)