instance_eval против class_eval в модуле

class Foo
    include Module.new { class_eval "def lab; puts 'm' end" }

    def lab
      super 
      puts 'c'
    end
end

Foo.new.lab #=> m c

================================= =============================================

class Foo
    include Module.new { instance_eval "def lab; puts 'm' end" }

    def lab
      super 
      puts 'c'
    end
end

Обратите внимание, здесь я изменил class_eval на instance_eval

Foo.new.lab rescue nil#=> no super class method lab
Foo.lab #=> undefined method lab for Foo class

Таким образом, кажется, что включение модуля не определило ни метод экземпляра, ни метод класса.

Любое объяснение, что здесь происходит?

Этот код был протестирован на ruby ​​1.8.7 на mac.

5
задан Nick Vanderbilt 19 August 2010 в 15:43
поделиться