iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 8
1
自我挑戰組

從色彩繽紛到只看亂碼日子,學程式從 Ruby 出發!系列 第 8

Day08 | 模組 include v.s extend

還記得昨天的富爸爸例子,後代取得了前輩的天賦。
從昨天文章的比較,類別class引入模組來取得方法,也稍微了解類別與模組之間得差異
那今天就來看模組的包含(include)與延伸(extend)。

差異

先用飛天豬程式碼來看一下:

module Flyable
  def fly
    puts "I can fly!"
  end
end

class Pig
  include Flyable
end

Pig.new.fly  # => I can fly!
Pig.fly      # => NoMethodError

# --------------------

class Pig
  extend Flyable
end

Pig.fly      # => I can fly!
Pig.new.fly  # => NoMethodError

從程式碼得到的結果來看:

  • 包含(include):在使用include的時候,也需要new個新的物件實體,然後才能使用此方法。
  • 延伸(extend):extend跟include不一樣,當類別中使用extend,則是可以直接把方法拿過來使用。

引入位置

在網路上看到Fred大大文章,用繼承鍊的引入的方式來圖解,從文章更清楚知道
include所引入的方法是在類別class的上方,則會將模組內的方法增加為自己的實體方法(instance method)
extend則是會將模組引入到類別class的singleton class上方,所以說模組的方法會變成類別方法(class mehtod)。

更多可詳細內容Fred大大得文章


至於實體與類別方法是什麼,就之後再來一探究竟了!
新手筆記能解釋得還不多,靠著閱讀一點一點累積知識啊~
期待每天用0.1%速度緩慢吸收/images/emoticon/emoticon07.gif


上一篇
Day07 | 類別Class與模組Module比一比
下一篇
Day09 | Block
系列文
從色彩繽紛到只看亂碼日子,學程式從 Ruby 出發!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言