iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 9
0
Modern Web

Ruby on Rails面試題挑戰系列 第 9

Ruby on Rails面試題挑戰 Day09 - include與extend的差別在哪裡?

What is the difference between include and extend?
include與extend的差別在哪裡?


昨天講解了類別與模組的差異,也順便知道可以在類別裡面使用include模組的方式來擴充方法。

好像又有看過extend模組這樣的寫法,那到底有什麼不同呢?

include是引用模組內的方法來擴充實體方法,而extend則是擴充類別方法。

以下面的例子說明

module Piano
  def play_piano
    puts "I can play the piano!"
  end
end

module Walkable
  def walk
    puts "walk!!"
  end
end

class Human
  include Piano
  extend Walkable
end

John = Human.new
John.play_piano # => I can play the piano!
John.walk # => 噴錯

Human.walk # => walk!!

可以看到與Human類別include Piano模組來增加實體方法,實體John就可以使用,而extend Walkable模組則是增加類別方法,實體John是不能使用extend引進來的類別方法的,身為類別的Human才可以。若對類別方法與實體方法有些陌生的,可以參考我的這篇文章,介紹了實體方法與類別方法的差別。

你可以這樣回答:

include與extend都是可以讓類別增加方法的做法,而差別在於include是增加實體方法,而是extend增加類別方法

參考資料

  1. Include v/s Extend in Ruby
  2. Ruby 的繼承鍊 (2) — Module 的 include、prepend 和 extend

上一篇
Ruby on Rails面試題挑戰 Day08 - 類別(Class)與模組(Module)的差異在哪裡?
下一篇
Ruby on Rails面試題挑戰 Day10 - 在Ruby中的區塊(block)是什麼?
系列文
Ruby on Rails面試題挑戰30

尚未有邦友留言

立即登入留言