从Ruby中包含的模块调用一个重新定义的类函数

时间:2016-06-22 11:07:45

标签: ruby class inheritance module mixins

以下是目前的情况:

Core_Class是包含许多模块的关键类 Use_Class继承自Core_Class

在Core_Class包含的其中一个模块中,我希望它访问Core_Class中定义的方法。这很好用。让我们调用这个方法header()

我现在尝试在Use_class中重新定义此函数,以便use_class具有唯一的标头方法。

这看起来有点像这样:

module Print_header
  def print_header_
    Core_Class.header()
  end
end
class Core_Class
  include Print_header
  def header()
    puts "old header"
  end
  def run
    print_header
  end
end
class Use_Class < Core_Class
  def header()
    puts "New header"
  end
  def run
    print_header
  end
end

现在我的问题是旧代码被使用了。我觉得我缺少面向对象编程,继承和mixins的东西,但我不确定是什么。花大约2个小时谷歌搜索,无法找到帮助我理解的东西,而且我是办公室里唯一的Ruby(非常非常初级)的开发者。

如果可能的话,除了修复之外,你能否解释什么是错误的?

由于

1 个答案:

答案 0 :(得分:0)

我认为,你想要实现这样的东西:

module PrintHeader
  def print_header
    puts header
  end
end

class CoreClass
  include PrintHeader

  def header
    'old header'
  end
end

class UseClass < CoreClass
  def header
    'New header'
  end
end

core = CoreClass.new
use = UseClass.new

core.header
# => 'old header'
core.print_header
# old header
# => nil
use.header
# => 'New header'
use.print_header
# New header
# => nil