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