[英]How to understand nil vs. empty vs. blank in Ruby
我發現自己反復尋找nil?
差異的明確定義nil?
, blank?
,和empty?
在 Ruby on Rails 中。 這是我最近的一次:
blank?
對象為假、空或空白字符串。 例如, ""
、 " "
、 nil
、 []
和{}
為空。
nil?
對象是 NilClass 的實例。
empty?
對象是特定於類的,並且定義因類而異。 如果字符串沒有字符,則字符串為空;如果數組不包含任何項,則數組為空。
有什么遺漏,或者可以進行更嚴格的比較嗎?
.nil?
可以在任何對象上使用,如果對象為零則為真。
.empty?
可用於字符串、數組和散列,並在以下情況下返回 true:
運行.empty?
對 nil 的東西會拋出NoMethodError
。
那是哪里.blank?
進來了。它是由 Rails 實現的,可以對任何對象進行操作,也可以像.empty?
一樣工作.empty?
在字符串、數組和散列上。
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
我在所有情況下制作了這張有用的表格:
blank?
, present?
由 Rails 提供。
快速提示: !obj.blank? == obj.present?
!obj.blank? == obj.present?
在某些表情中可以方便/更容易地看到眼睛
一個區別是.nil?
和. .empty?
是由編程語言 Ruby 提供的方法,而.blank?
是 Web 開發框架 Rails添加的東西。
一個特殊情況是在嘗試評估布爾值是否為 nil 時:
false.present? == false
false.blank? == true
false.nil? == false
在這種情況下,建議使用.nil?
只是一點關於any?
注意事項any?
建議:他是對的,它通常等同於!empty?
. 然而, any?
將返回true
為僅包含空格的字符串(ala " "
)。
當然,也請參閱上面的 1.9 評論。
不要忘記any?
這通常是!empty?
. 在 Rails 中,我通常檢查語句末尾是否存在某些內容, if something
或unless something
然后使用blank?
哪里需要,因為它似乎無處不在。
nil?
是一個標准的 Ruby 方法,可以在所有對象上調用,如果對象為nil
則返回true
:
b = nil
b.nil? # => true
empty?
是一個標准的 Ruby 方法,可以在一些對象上調用,例如字符串、數組和哈希,如果這些對象不包含元素,則返回true
:
a = []
a.empty? # => true
b = ["2","4"]
b.empty? # => false
empty?
不能在nil
對象上調用。
blank?
是一個 Rails 方法,可以在nil
對象和空對象上調用。
其他人都很好地解釋了有什么區別。
我想在 Ruby On Rails 中添加,使用obj.blank?
更好obj.blank?
或obj.present?
而不是obj.nil?
或obj.empty?
.
obj.blank?
手柄所有類型nil
, ''
, []
{}
並返回true
,如果值不可用,並返回false
如果值可用在任何類型的對象。
exists?
方法可用於檢查數據是否存在於數據庫中。 它返回布爾值true
或false
。
導軌 4
@corban-brook 'Array gotcha : blank?'的替代方案用於檢查數組是否僅包含空值並且可以視為空白? 真的:
[ nil, '' ].all? &:blank? == true
還可以這樣做:
[nil, '', "", " ",' '].reject(&:blank?).blank? == true
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?
這對於檢查您認為是集合但也可能為零的對象很有用。
雖然這個問題有 n 種答案,但我喜歡這里解釋的方式,所以又發布了一個答案:-)
看看下面的指標- 它的自我解釋與跨可用方法使用的各種數據類型。
參考: https : //blog.appsignal.com/2018/09/11/differences-between-nil-empty-blank-and-present.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.