0

我有两个文件 foo 和 bar。Foo 实现类并初始化实例。在 bar.rb 文件中,我需要 foo.rb 但我也想从 foo.rb 更改 Foo::Bar 的实现

目录树

  • foo.rb
  • bar.rb

foo.rb

module Foo
  class Bar
    def random_method
      puts "Foo::Bar.random_method"
    end 
  end
end
Foo::Bar.new.random_method

bar.rb

#here I want overwrite Foo::Bar.random_method
require_relative 'foo' # so this line use new random_method
4

1 回答 1

2

如果您不允许触摸,这是不可能的(AFAIK)foo.rb

# 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
于 2012-07-20T15:48:37.850 回答