iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 6
1
自我挑戰組

Ruby菜鳥村村民遊記系列 第 6

遊記ep.6 Include?!Extend!的Ruby村

來Ruby村生活了也過一段時間,
今天想要介紹一個跟 class 很有淵源的方法。
我們都知道,除了在 class 中定義方法,
若想要在不同 class 之間都使用額外的方法,在每個class都定義方法就顯得有點囉唆~
沒關係,Ruby村村長早就為我們準備好了不同的外掛裝備了!
text
組裝後就變成了這樣
text
然後你就可以飛了(誤

咳咳!其實這個翔翼型裝備呢,就是稱作 module 的模組,
引用了模組化的概念,使用了這套模組,你就得到了新的能力!
聽起來很炫吧,那我們就來看看該怎麼讓使用模組化吧?

module Aile
  def fly
    "I am Aile Strike #{self.class} now"
  end
end

class Gundam
  include Aile
end

strike = Gundam.new 
strike.fly
=> "I am Aile Strike Gundam now"

strike.class
=>Gundam

這裡我們定義了一個模組 Aile,
並且給了一個類別叫 Gundam
而 strike 是由 Gundam 這個類別產生(new)的實體(instance)
我們要讓 strike 外掛上 Aile 這個裝備可以使用 include 這個方法,
於是翔翼型攻擊鋼彈就這麼誕生了! 那 extend 又是怎麼回事呢?

module Aile
  def fly
    "I am Aile Strike #{self.class} now"
  end
end

class Gundam
  extend Aile
end

strike = Gundam 
strike.fly
=> "I am Aile Strike Gundam now"

stirke.class
=>Class

看起來跟上面的include 很像,實際上是差了那麼一點點,
這裡我們讓 strike 直接是 Gundam 這個類別,並不是實體(instance)
而作用在類別上的方法,就是類別方法
作用在實體上的方法,則是實體方法


上一篇
遊記ep.5 DoEnd 與 { } 的Ruby村
下一篇
遊記ep.7 比鄰而居的Rails村
系列文
Ruby菜鳥村村民遊記30

尚未有邦友留言

立即登入留言