tutorial - Ruby on Rails中nil v。empty v。blank的簡要解釋




ruby用途 (10)

Rails 4

替代@ corban-brook的'Array gotcha :空白?' 用於檢查數組是否只包含空值並且可以被視為空白? 真正:

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

人們也可以這樣做:

[nil, '', "", " ",'  '].reject(&:blank?).blank? == true

我發現自己一直在尋找一個清晰的nil?差異定義nil?blank? ,並且是empty? 在Ruby on Rails中。 這是我最近來的:

  • blank? 對像是假的,空的或空白字符串。 例如, """ "nil[]{}為空。

  • nil? 對像是NilClass的實例。

  • empty? 對像是特定於類的,並且定義因類而異。 如果沒有字符,則字符串為空;如果數組不包含任何項目,則該數組為空。

有什麼缺失或可以進行更緊密的比較?


  • 一切都是nil?blank?
  • 一切都是empty?blank?
  • 沒有什麼是empty?nil?
  • 沒有什麼是nil?empty?

tl; dr - 只使用blank?present? 除非你想區分""" "


exists? 方法可用於檢查數據庫中是否存在數據。 它返回truefalse布爾值。


nil? 可以用在任何物體上。 它確定對像是否有任何值,包括'空白'值。

例如:

example = nil
example.nil?  # true

"".nil?  # false

基本上nil? 只有當對象實際上等於'nil'時才會返回true。

empty? 僅在被視為集合的對像上調用。 這包括諸如字符串(字符集合),散列(鍵/值對集合)和數組(任意對象集合)之類的東西。 empty? 返回true是否在集合中沒有項目。

例如:

"".empty? # true
"hi".empty?   # false
{}.empty?  # true
{"" => ""}.empty?   # false
[].empty?   # true
[nil].empty?  # false

nil.empty?  # NoMethodError: undefined method `empty?' for nil:NilClass

注意那是empty? 不能在nil對像上調用,因為nil對像不是集合,它會引發異常。

另請注意,即使集合中的項目是空白的,也並不意味著集合是空的。

blank? 基本上是nil?的組合nil?empty? 這對檢查您認為是集合的對像很有用,但也可能為零。


一個區別是.nil?.empty? 是由Ruby編程語言提供的方法,而.blank? 是由Web開發框架Rails added的。


不要忘記any? 這通常是!empty? 。 在Rails中,我通常會在語句結尾處檢查是否存在某些if something或者unless something使用blank? 因為它似乎在任何地方都有效。


只是關於any?一個小記錄any? 推薦:他是對的,它通常相當於!empty? 。 但是, any? 將返回true的字符串只是空白(ala " " )。

當然,也請參閱上面的1.9註釋。



我用所有情況製作了這個有用的表格:


特殊情況是當試圖評估布爾值是否為零時:

false.present? == false
false.blank? == true
false.nil? == false

在這種情況下,建議是使用.nil?





ruby