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

标签 ruby syntax module

我为扩展写了两种语法,但是出现了不同的行为,一个返回 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

最佳答案

在类声明期间调用 extend 的第一个片段中,i. e.在 Toy 对象上,这显然是一个类。它与调用 Toy.extend(Discount) 相同。

在第二个片段中,您扩展 Toy.new,它显然是一个Toy 实例。

关于ruby - ruby 的扩展语法是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42383487/

相关文章:

generics - 我可以通过哪些不同的方式来声明对泛型类型进行操作的类型?

php - 德鲁巴 8 : How do I customize a form widget to show an entity field value instead of the entity title?

node.js - Node.js 和 ES6 中的 module.exports 与 export default

ruby-on-rails - Rails 3 中的嵌套模型错误

ruby-on-rails - 无法在 Ubuntu 14.04 上安装 kgio 2.8.1

c - 为什么语句 "2i;"不会导致编译器错误?

javascript - 循环 - forEach, for, for...of, for...in

javascript - 在 Javascript 中创建其他文件所需的模块?

ruby - 不在 Ruby Regex 中抢组比赛

ruby-on-rails - ruby on Rails 中的路由是 MVC Controller 的一部分吗?