- .nil? 和 .empty? 是ruby的方法。 .blank? 是rails的方法。 - ? 
- .nil? 判断对象是否存在(nil)。不存在的对象都是nil的。 - ? 
- .empty? 对象已经存在,判断是否为空字段,比如一个字符串是否为空串,或者一个数组中是否有值 - ? 
- .blank? 相当于同时满足 .nil? 和 .empty? 。railsAPI中的解释是如果对象是:false, empty, 空白字符. 比如说: "", " ", nil , [], 和{}都算是blank。 (object.blank? 相当于 object.nil?||object.empty?)。 - ? 
- present?方法就是blank?方法的相反,判断是否存在,因此present?方法与!blank?方法两者表达的意思是一样的。 
| 1 2 3 4 5 6 | nil.nil??????? =>?truefalse.nil????? =>?false1.nil????????? =>?false0.nil????????? =>?false"".nil???????? =>?false[].nil???????? =>?false | 
| 1 2 3 4 5 | "".empty?????????? =>?true"abc".empty??????? =>?false[].empty?????????? =>?true[1,?2,?3].empty??? =>?false1.empty??????????? => NoMethodError??#说明 empty? 方法不能用于整数 | 
| 1 2 3 4 5 6 7 8 9 10 11 | p?true.blank?????????FALSE?p?false.blank???????TRUE?p?"true".blank??????FALSE?p?"".blank??????????TRUE?p?"\n".blank????????TRUE?p?'\n'.blank????????FALSE?p?'true'.blank??????FALSE?p?''.blank??????????TRUE?p?1.blank???????????FALSE?p [].blank??????????TRUE?p [1].blank?????????FALSE | 
| 1 2 3 4 | nil.present??????? =>?false[].present???????? =>?false"hello".present??? =>?true["a"].present????? =>?true刚开始接触RoR时,我经常将 nil?, empty? blank? 方法混淆,用错. 这导致了当我在调用它们时处理条件判断所遇到的麻烦. 而我之前对PHP, Actionscript的理解对此不仅没有帮助,反而让我变得更困扰. 这些语言的类似方法返回的结果与Ruby确是相反的. 我想通过一些代码的练习,能够加深我对这些相似方法的理解.? 先从nil?方法开始.?.nil? 方法是对于Ruby中任意对象皆可调用的方法, 用于检测目标对象是否存在,有效. ?在条件分支语句中当你调用一个对象之前 事先对它进行有效性进行判断是很有帮助的. Ruby中, 所有类均继承自Object. ?nil? 是来自于Object的方法, 因此除了特殊情况( 对它的重写, 相信一般也不会这么做), 所有类均会拥有此方法.? ? 为更好理解Ruby是怎样表示一个不存在的对象, 我们需要看一变量 nil. ?在其它的语言中,同样地被记作 NULL或null. 根据语言 对"空"的理解, NULL不会指向任何东西. Ruby恰恰在这点上与这些不同, ?Ruby拥有一个真实存在的类NilClass , 所以nil有其自身的方法, 尽管这在其它语言的角度看来有些不对劲, ? ? 
 当我们访问一个不存在的对象,或者正好将一个目标的值赋为nil, 我们会得到一个NilClass的单键实例对象 -- nil. 见下面的几个例子: ? 
 
 ? ? ? 下面我们来看看 empty??
 
 
 ? ? ? Rails中会常用到的blank? 方法? 
 
 
 ? |