ruby – 为什么模块初始化方法没有被调用?

为什么当它包含在Temp类中时,不会调用此模块的初始化方法
module Temp
  def initialize
    p "asdasd"
  end
end

class Swap
  include Temp
  def initialize
    p "m in class"
  end
end

s = Swap.new

m in class

解决方法

Swap类重写Temp模块中定义的initialize方法.当Ruby尝试查找方法时,它会从最派生的类/模块开始搜索继承层次结构.在这种情况下,搜索在Swap类结束.

除非您使用super显式调用它们,否则不会调用重写的方法.例如

class Swap
  include Temp
  def initialize
    p "m in  class"
    super
  end
end

将从Swap#initialize调用Temp#initialize.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...