ruby的module与Java的interface以及C++的friend

   ModuleRuby一个非常好用的功能,它跟Class类别非常相似,你可以在里面定义方法。只是你不能用new来建立它。它的第一个用途是可以当做Namespace来放一些工具方法:

创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站建设、网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的献县网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

  1. module MyUtil       
  2.     def self.foobar 
  3.     puts "foobar" 
  4.   end  
  5. end   
  6.  
  7. MyUtil.foobar # 输出 foobar 

        另一个更重要的功能是Mixins,可以将一个Module混入类別之中,这样这个类別就会拥有此Module的方法。这回让我们拆成两个wenji,debug.rbfoobar.rb,然後在foobar.rb中用引用debug.rb

        首先是debug.rb:

  1. module Debug      
  2.     def who_am_i? 
  3.         puts "#{self.class.name}: #{self.inspect}"      
  4.     end  
  5. end 

然后是foobar.rb:

  1. require "./debug"  
  2. class Foo      
  3.     include Debug # 這個動作叫做 Mixin  
  4. end   
  5.  
  6. class Bar      
  7.     include Debug  
  8. end 
  9.  
  10. a = Foo.new  
  11. b = Bar.new  
  12. a.who_am_i? # 輸出 Foo: #  
  13. b.who_am_i? # 輸出 Bar: # 

       Ruby使用Module来解決多重继承的问题,不同类别之间只要拥有相同的方法,就可以改放在Module里面,然后include它即可。

        Java中的interface可以解决多重继承的缺陷,C++是支持多重继承的,而且有一个元友的概念。我认为ruby的include module更像C++的friend class的功能。


网站标题:ruby的module与Java的interface以及C++的friend
转载来于:http://myzitong.com/article/piihes.html