class_eval() 和 instance_eval() 的差别理解:
MyClass.class_eval() 里面的代码是运行在MyClass的类定义作用域中,MyClass#instance_eval() 里面的代码是运行在MyClass类的实例方法所在的作用域中,所以
class AAA end AAA.instance_eval do def aaa puts ‘aaaa‘ end end AAA.send :define_method, :aaa do puts ‘new aaa‘ end AAA.aaa # => aaa a = AAA.new a.aaa # => new aaa
?第四行定义的是AAA的类方法。因为instance_eval()是跑在AAA的eigenclass的实例方法中也就是生成的是AAA的类方法。
原文:http://wudixiaotie.iteye.com/blog/2152464