Ruby 中基础的 .nil? .empty? .blank? .present? 还分不清吗?
入门了Ruby on Rails,有很多神奇的方法,今天介绍几个新手傻傻分不清的方法。
.nil?
nil.nil? #true
[].nil? #false
{}.nil? #false
"".nil? #false
" ".nil? #false
"abc".nil? #false
123.nil? #false
- 任何形式的都是false,只有nil是true
.empty? & .any?
nil.empty? #NoMethodError: undefined method `empty?' for nil:NilClass
[].empty? #true
{}.empty? #true
"".empty? #true
" ".empty? #false
"abc".empty? #false
123.empty? #NoMethodError: undefined method `empty?' for 123:Fixnum
- 只要是空值就是 true(空白 不算空值)
- 相对的 method 是 any?
nil.any? #NoMethodError: undefined method `any?' for nil:NilClass
[].any? #false
{}.any? #false
"".any? #NoMethodError: undefined method `any?' for "":String
" ".any? #NoMethodError: undefined method `any?' for "":String
"abc".any? #NoMethodError: undefined method `any?' for "":String
123.any? #NoMethodError: undefined method `any?' for 123:Fixnum
但是要注意,String 并没有提供 .any? 这个方法
.blank? & .present?
nil.blank? #true
[].blank? #true
{}.blank? #true
"".blank? #true
" ".blank? #true
"abc".blank? #false
123.blank? #false
- 只要是 nil,空值都是 true
- 有点像是 Object.nil? || Object.empty? 的综合体,但条件比 .empty 宽松一点,空白 也会是 true
- 相对的 method 是 present?
nil.present? #false
[].present? #false
{}.present? #false
"".present? #false
" ".present? #false
"abc".present? #true
123.present? #true