Ruby中是否可以重新定义初始化方法?

时间:2016-08-09 21:05:04

标签: ruby open-closed-principle

我有第三方代码,如下所示:

class Foo
  def initialize
    @hello = "world"
  end

  def msg
    @hello
  end
end

然后,我添加了一个包含这些内容的新文件foo_redefinition.rb

class Foo
  def initialize
    @hello = "welt"
  end
end

然后,另一个第三方代码在我的主类中调用一个方法,在我的主类文件中我做require_relative 'foo_redefinition'。但是,当第三方代码(调用我的方法,因此读取我的主文件,需要重新定义)调用Foo.msg后,它返回" world",而不是" welt"。

另外,当我这样做时

require_relative 'foo_redefinition'

# ... lots of code

Foo::new.msg #=> world (instead of welt)

我的问题是:

  1. 是否可以重新定义初始化方法?
  2. 如果是的话,我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

我担心Foo是一个懒惰的autoload版课程,而且你正在重新定义&#34; <{1}}加载前initialize

试试这个

Foo

这会强制Foo.class_eval do def initialize @hello = "welt" end end 在重新定义任何内容之前加载。