Ruby nil概念详解

开发 开发工具
Ruby nil的意思实际上是false的意思,当我们选取某个对象的属性时,首先要判断的就是对象是否为nil,就是是否为false。

Ruby语言在实际应用中可以帮助我轻松的解决许多问题。在这里我们将会为大家详细解读有关Ruby nil的一些概念,希望能对大家的学习有些帮助。#t#

我们常常处理这样的代码:

name=person?person.name:nil

取某个对象的一个属性,先判断对象是否为nil,不是Ruby nil就返回对象属性,否则返回nil。这样的代码写多了比较恶心,是否有比较有趣的方式来减少代码?作者给出了一段代码:

 

  1. module ObjectExtension  
  2. def nil_or  
  3. return self unless self.nil?  
  4. o = Object.new  
  5. class << o 
  6. def method_missing(sym,
     *args); nil; end  
  7. end  
  8. o  
  9. end  
  10. end  
  11. class Object  
  12. include ObjectExtension  
  13. end 

 

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

name=person.nil_or.name是不是相当的DSL呢?

责任编辑:曹凯 来源: ddvip.com
相关推荐

2009-12-18 15:24:52

2009-12-16 16:24:00

Ruby on Rai

2009-12-18 15:56:05

Ruby特殊语法

2009-12-17 11:27:31

Ruby时间方法

2009-12-14 18:14:27

Ruby DSL

2009-12-15 15:55:43

Ruby模块

2009-10-27 14:25:08

2009-12-16 10:57:16

Ruby文件锁

2009-12-16 14:33:21

Ruby哈希表

2009-12-18 17:20:00

Ruby核心类

2009-12-16 16:44:31

Ruby on Rai

2015-03-13 09:36:09

NULLnullptr

2009-12-16 09:13:05

Ruby赋值语句

2009-12-18 15:06:10

Ruby常用库

2009-12-18 09:43:32

Ruby伪变量

2023-09-14 09:54:01

Btrfs文件系统

2010-05-17 13:39:10

MySQL Clust

2010-07-12 13:20:18

UML协作图

2010-07-14 15:23:19

Perl文件句柄

2010-02-02 11:16:28

C++异常
点赞
收藏

51CTO技术栈公众号