iT邦幫忙

2023 iThome 鐵人賽

DAY 29
0
自我挑戰組

自我挑戰Ruby系列 第 29

Day 29 - 模組

  • 分享至 

  • xImage
  •  

模組

以之前的例子而言,

對於每個國民運動中心可以用一個國民動中心的類別繼承,

但大家今天會好奇,有些國民運動中心有冰宮,

但有些沒有,如果藉由繼承,這樣會使得每個運動中心都可以使用冰宮,

例如:

class Card
  def rent_court(sport)
    puts "租#{sport}" 
  end

  def use
     puts "使用泳池"
  end

  def frozone_place
     puts "使用冰宮"
  end
end

class Xinzhuang < Card
end

class Sanchong < Card
end

class Banqiao < Card
end

class Tucheng < Card
end

但其實,可能只有土城運動中心才能使用冰宮,

所以這邊藉由繼承的形式,

對於其他運動中心的情況就不太適當,

所以這時候我們就會使用模組這個功能。

定義模組

我們會藉由Module來定義,Module 後面接模組名稱,

其類別名稱要以常數來命名,所以第一個英文字母要大寫。

再透過include模組進入類別裡面,

這樣類別就可以使用模組所定義好的方法。

上面的例子而言:

class Card
  def rent_court(sport)
    puts "租#{sport}" 
  end

  def use
     puts "使用泳池"
  end

end

module Frozone
  def frozone_place
     puts "使用冰宮"
  end
end

class Xinzhuang < Card
end

class Sanchong < Card
end

class Banqiao < Card
end

class Tucheng < Card
   include Frozone
end

所以當使用include模組後:

arance = Tucheng.new
arance.frozone_place

即可以得到,使用冰宮。

同時間土城運動中心也繼承所有運動中心,

可以使用游泳池。

所以藉由 arance.use也可以得到使用泳池。

差異

模組與類別的差異性,模組沒有繼承的功能,

所以也不能實體化。

所以不能藉由模組做繼承:

module Frozone < Fire

end

所以也不能藉由模組做實體化:

module Frozone

end
arance = Frozone.new

上一篇
Day 28 - 特性
下一篇
Day 30 - 最後一天並非結束
系列文
自我挑戰Ruby30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言