2017-02-22 43 views
1

我寫了兩種擴展的語法,但是出現了不同的行爲,一個返回50,另一個返回70,任何人都可以解釋爲什麼?ruby​​的擴展語法是如何工作的?

module Discount 
    def cost 
    super + 20 
    end 
end 

class Toy 
    extend Discount 
    def cost 
    50 
    end 
end 

# check 
Toy.new.cost #=> 50 

但是:

module Discount 
    def cost 
    super + 20 
    end 
end 

class Toy 
    def cost 
    50 
    end 
end 

# check 
Toy.new.extend(Discount).cost #=>70 
+0

予給多個的一個例子: '類漢堡 DEF成本端 端 模塊乾酪漢堡包 DEF成本 超級+ 10 端 端 module LargeBurger def cost super + 15 end end burger = burger.new puts burger.extend(CheeseBurger).cost puts burger.extend(LargeBurger).cost' – Tsao

+0

上面的代碼輸出60和75,看起來新的擴展模塊的成本方法沒有覆蓋舊的成本版本號 – Tsao

+0

這使我有點困惑 – Tsao

回答

2

在第一個片段,你的類聲明中稱extend,我。即Toy對象,這顯然是一個類。這與撥打Toy.extend(Discount)相同。

在第二個片段中你extendToy.new,這顯然是一個Toy實例。