Module.new与class_eval

Nic*_*ilt 4 ruby metaprogramming ruby-on-rails

这是一个很大的提交.但我希望你专注于这个改变块.http://github.com/rails/rails/commit/d916c62cfc7c59ab6411407a05b946d3dd7535e9#L2L1304

即使不了解代码的完整上下文,我也无法想到我将使用的场景

include Module.new {
  class_eval <<-RUBY
    def foo
       puts 'foo'
    end
  RUBY
}
Run Code Online (Sandbox Code Playgroud)

然后最终结果是在根上下文(之前的自我include Module.new)中foo添加了一个被调用的方法.

如果我拿出的Module.new代码,如果我只留下class_eval在这种情况下,我也将有一个名为方法fooself.

我错过了什么

Jak*_*mpl 5

如果您仔细阅读文档,您会发现只有在尚未定义的情况下,包含模块才会在其中添加方法.因此,如果方法已经存在,这种方法不会覆盖该方法.