示例代码:
module B
def f2
puts "B::f2"
end
end
class C
def initialize
extend B
end
def f2
puts "C::f2"
end
end
c = C.new
c.f2
以上示例代码是我的问题的抽象。 Class C
动态扩展module B
(B
实际上已扩展为C
的实例。来自f2
的方法B
无法满足我的需求,因此我想覆盖f2
。如何实现?
答案 0 :(得分:2)
我实际上不喜欢在initialize
中延伸。以不同方式实现“插件”的原因有很多。
但是如果你想以这种方式“用脚射击”,那么,再做一次扩展:
module B
def f2
puts 'B::f2'
end
end
class C
attr_reader :parent_state
def initialize
extend B
extend BOverrides
@parent_state = 'Parent State'
end
module BOverrides
def f2
puts 'C::f2'
puts 'Yes, I have access to %s' % parent_state
end
end
end
c = C.new
c.f2