class Foo
include Module.new { class_eval "def lab; puts 'm' end" }
def lab
super
puts 'c'
end
end
Foo.new.lab #=> m c
======================================= =================================instance_eval vs class_eval in module
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
所以看起来包括模块既没有定义实例方法也没有定义类方法。
任何解释发生了什么?
这段代码在mac上用ruby 1.8.7测试过。
优秀的解释。将事情分开并一次一步地看着它会有所帮助。 – 2010-08-19 17:41:41