.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 ??????? =>? true false . nil ????? =>? false 1 . nil ????????? =>? false 0 . nil ????????? =>? false "" . nil ???????? =>? false []. nil ???????? =>? false |
1 2 3 4 5 | "" .empty?????????? =>? true "abc" .empty??????? =>? false [].empty?????????? =>? true [ 1 ,? 2 ,? 3 ].empty??? =>? false 1 .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? 方法?
? |