Ruby类函数定义的几种方式

来源:互联网 发布:java 邮件发送工具类 编辑:程序博客网 时间:2024/06/05 20:39

Ruby类函数定义的几种方式

    博客分类: 
  • Ruby
 
Ruby类函数定义的几种方式 
参考:ruby-defining-class-methods 

1、 
Ruby代码  收藏代码
  1. class Person  
  2.   def Person.find(id)  
  3.     ...  
  4.   end  
  5. end  

这种方式,有一点不好,如果更改类名,相应的类函数定义的类名也要更改。 
2、
Ruby代码  收藏代码
  1. class Person  
  2.   def self.find(id)  
  3.     ...  
  4.   end  
  5. end  

这种方式比较好,没有上面提到的问题。作者也推荐使用这种方式。 
3、 
Ruby代码  收藏代码
  1. class Person  
  2.   class << self  
  3.     protected  
  4.     def find(id)  
  5.       ...  
  6.     end  
  7.   end  
  8. end  

在定义protected类函数时使用。为什么要定义protected类函数可参见作者的另一篇文章Protected Class Methods。 
4、比较复杂的 
Ruby代码  收藏代码
  1. class Object # http://whytheluckystiff.net/articles/seeingMetaclassesClearly.html  
  2.   def meta_def name, &blk  
  3.     (class << selfselfend).instance_eval { define_method name, &blk }  
  4.   end  
  5. end  
  6.   
  7. class Service  
  8.   def self.responses(hash)  
  9.     hash.each do |method_name, result|  
  10.       meta_def method_name do  
  11.         result  
  12.       end  
  13.     end  
  14.   end  
  15.     
  16.   responses :success => 20, :unreachable => 23  
  17. end  
  18.   
  19. Service.success # => 20  
  20. Service.unreachable # => 23  

由于本人Ruby功力还不够,上面的代码有些还看不明,有兴趣的读者可直接看原文。 
5、最后作者还提到一种方式 
Ruby代码  收藏代码
  1. class Person  
  2.   instance_eval do  
  3.     def find(id)  
  4.       ...  
  5.     end  
  6.   end  
  7. end  

用到instance_eval,没搞清楚这种方式有什么特点。
原创粉丝点击