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

总体来看,尽量不要用 .nil? 在程序中使用的比较多的是 .blank? 和 .present?

posted @ 2020-04-15 16:32  Mr-Ran  阅读(332)  评论(0编辑  收藏  举报