我有两个文件foo和bar。 Foo实现了类并初始化了实例。在文件bar.rb里面我想要foo.rb但我也希望从foo.rb改变Foo :: Bar的实现
dir tree
module Foo
class Bar
def random_method
puts "Foo::Bar.random_method"
end
end
end
Foo::Bar.new.random_method
#here I want overwrite Foo::Bar.random_method
require_relative 'foo' # so this line use new random_method
答案 0 :(得分:2)
如果您不允许触摸foo.rb
,则无法执行此操作(AFAIK)。
# bar.rb
# redefine another random method (to be precise, define its first version)
module Foo
class Bar
def random_method
puts 'another random method'
end
end
end
require_relative 'foo' # this will redefine the method and execute version from foo.rb
一种可能的方法是拆分Foo::Bar
的声明和使用它的代码。
# foo_def.rb
module Foo
class Bar
def random_method
puts "Foo::Bar.random_method"
end
end
end
# foo.rb
require_relative 'foo_def'
Foo::Bar.new.random_method
# bar.rb
require_relative 'foo_def'
# replace the method here
module Foo
class Bar
def random_method
puts 'another random method'
end
end
end
require_relative 'foo' # run with updated method