`
fireDragonpzy
  • 浏览: 466524 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

ror技巧--空判断

阅读更多
取某个对象的一个属性,先判断对象是否为nil,不是nil就返回对象属性,否则返回nil。一般我们这么写:
  
 name=user?user.name:nil  


我们可以这么简化:

   module ObjectExtension  
     def nil_or  
      return self unless self.nil?  
      o = Object.new  
      class << o  
        def method_missing(sym, *args); nil end  
      end  
      o  
      end  
    end  
    class Object  
      include ObjectExtension  
    end  



   上面的代码为Object加入了扩展,为每个对象实例增加了一个nil_or方法,分析下这个方法:如果对象不为nil,马上返回self(也就是对象本身),否则生成一个新的对象,这个对象通过method_missing机制将所有的方法调用都返回nil(原文是用Class.new,生成的类将不会被GC,这里采用回复给出的方案,生成对象,在对象的metaclass上做method_missing)。那么现在代码可以写成:

   
name=user.nil_or.name 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics