首页 > 其他 > 详细

ruby深入研究11

时间:2014-11-06 02:31:34      阅读:142      评论:0      收藏:0      [点我收藏+]

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的类方法。

ruby深入研究11

原文:http://wudixiaotie.iteye.com/blog/2152464

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!