ruby的扩展语法是如何工作的?

时间:2017-02-22 05:36:56

标签: ruby syntax module

我为extend编写了两种语法,但是出现了不同的行为,一个返回50,另一个返回70,任何人都可以解释为什么?

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

2 个答案:

答案 0 :(得分:2)

在第一个片段中,你在课堂宣言中调用extend,i。即在Toy对象上,这显然是一个类。它与调用Toy.extend(Discount)相同。

在第二个代码段中extend Toy.new,显然是Toy个实例。

答案 1 :(得分:1)

Object #extend简单就是快捷方式,它包含接收器本征类中的模块。

有关本征类的更多信息,请转至https://en.wikipedia.org/wiki/Metaclass#In_Ruby