诗歌rails 之extend的用法

include是个语法(用1.class.methods.grep /include/ 不到),而extend是个方法(所有类或实例都有,因为是是根类Object的实例方法,见api:http://www.ruby-doc.org /core/classes/Object.html#M000335),用来给当前对象加载模块里的方法作为实例方法,如果当前对象是个类,那么就是成 为类方法,如果是实例,那么就是实例方法:
Ruby代码
  1. irb(main):001:0> class C1
  2. irb(main):002:1> end
  3. => nil
  4. irb(main):003:0> module M1
  5. irb(main):004:1> def foo
  6. irb(main):005:2> puts "bar"
  7. irb(main):006:2> end
  8. irb(main):007:1> end
  9. => nil
  10. irb(main):008:0> C1.foo
  11. NoMethodError: undefined method `foo' for C1:Class
  12. from (irb):8
  13. irb(main):009:0> C1.extend M1
  14. => C1
  15. irb(main):010:0> C1.foo
  16. bar
  17. => nil
  18. irb(main):011:0> C1.new.foo
  19. NoMethodError: undefined method `foo' for #
  20. from (irb):11
  21. irb(main):012:0> C1.new.extend(M1).foo
  22. bar
  23. => nil
  24. irb(main):013:0>
posted @ 2009-10-09 15:52  麦飞  阅读(335)  评论(0编辑  收藏  举报