从 Ruby 中包含的模块调用重新定义的 class 函数
Calling a class-function that gets redefined, from an included Module in Ruby
这是目前的情况:
Core_Class是keyclass里面包含了很多模块
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
现在我的问题是旧代码被使用了。我觉得我遗漏了一些关于面向对象编程、继承和混合的东西,但我不确定是什么。花了大约 2 个小时在谷歌上搜索,找不到可以帮助我理解的东西,而且我是办公室里唯一的 Ruby(非常初级)开发人员。
如果可能的话,除了修复之外,您能否解释一下出了什么问题?
谢谢
我想,你想实现这样的东西:
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
这是目前的情况:
Core_Class是keyclass里面包含了很多模块 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
现在我的问题是旧代码被使用了。我觉得我遗漏了一些关于面向对象编程、继承和混合的东西,但我不确定是什么。花了大约 2 个小时在谷歌上搜索,找不到可以帮助我理解的东西,而且我是办公室里唯一的 Ruby(非常初级)开发人员。
如果可能的话,除了修复之外,您能否解释一下出了什么问题?
谢谢
我想,你想实现这样的东西:
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