A concise explanation of nil v. empty v. blank in Ruby on Rails
.nil?
可以用在一切對象上,當對象爲nil時,返回true
.empty?
可以用於字符串,數組或者哈希,當滿足下列條件時,返回true
- String length == 0
- Array length == 0
- Hash length == 0
在nil對象上調用 .empty?
會拋出NoMethodError
異常。
.blank?
就是爲此而生的。這個方法是Rails實現的,類似於.empty?
可以作用於字符串,數組或者哈希,.blank?
可以作用於認爲對象。
nil.blank? == true
false.blank? == true
[].blank? == true
{}.blank? == true
"".blank? == true
5.blank? == false
0.blank? == false
對於只包含空格的字符串,.blank?
的返回同樣爲true
" ".blank? == true
" ".empty? == false
Rails同樣提供了.present?
方法,其返回值與.blank?
相反。
注意,就算數組中的元素都爲blank時,對數組調用.blank?
仍然會返回false。對於這種情況時,使用.all?
配合.blank?
,如下例:
[ nil, '' ].blank? == false
[ nil, '' ].all? &:blank? == true