Jex’s Note

Rails 小觀念

nil vs empty vs balnk

首先 blank 是 rails 才有的, ruby 本身是沒有的

nil 可以用在任何物件上, 即使物件為 nil, 當 Object 為 nil 的話為 true

empty 可以用在 strings, arrays and hashes, True 的話有以下三種情況

  • String length == 0
  • Array length == 0
  • Hash length == 0

如果在某個為 nil 的物件上問 .empty? 會擲出 NoMethodError

.blank? 可以解決這個問題, 它不會引發 NoMethodError, 用法跟 empty 幾乎一樣

nil.blank? = true       # empty? 會引發錯誤
false.blank? = true     # empty? 會引發錯誤
[].blank? = true
[].empty? = true
{}.blank? = true
{}.empty? = true
"".blank? = true
"".empty? = true
5.blank? = false       # empty? 會引發錯誤
0.blank? = false       # empty? 會引發錯誤

有一個 space 的情況

" ".blank? = true
" ".empty? = false

Array 是空的情況

[ nil, '' ].blank? == false
[ nil, '' ].all? &:blank? == true

Comments