Ruby on Rails中的nil v。empty v。blank的简要解释
我发现自己反复寻找一个清晰的nil?
差异的定义nil?
, blank?
, empty?
在Ruby on Rails上。 这是我最近来的:
-
blank?
对象是假的,空的或空白string。 例如,""
," "
,nil
,[]
和{}
是空的。 -
nil?
对象是NilClass的实例。 -
empty?
对象是特定于类的,而且定义因类而异。 如果没有字符,则string为空;如果不包含任何项目,则数组为空。
有什么缺失或可以进行更紧密的比较?
.nil?
可以在任何对象上使用,如果对象为零,则为真。
.empty?
可以用于string,数组和散列,并在以下情况下返回true:
- string长度== 0
- 数组长度== 0
- 哈希长度== 0
运行.empty?
在零的东西上会抛出一个NoMethodError
。
那是.blank?
它是由Rails实现的 ,可以在任何对象上运行,也可以像.empty?
一样工作.empty?
在string,数组和散列。
nil.blank? == true false.blank? == true [].blank? == true {}.blank? == true "".blank? == true 5.blank? == false 0.blank? == false
.blank?
也评估真正的string是非空的,但只包含空格:
" ".blank? == true " ".empty? == false
Rails也提供了 .present?
,它返回.blank?
的否定.blank?
。
arraysgotcha: blank?
即使数组的所有元素都是空白,也会返回false
。 为了确定在这种情况下的空白,使用all?
blank?
, 例如:
[ nil, '' ].blank? == false [ nil, '' ].all? &:blank? == true
我用所有的情况做了这个有用的表格:
只要扩展朱利安的桌子:
Ref: empty?blank?nil?傻傻分不清楚
快速提示: !obj.blank? == obj.present?
!obj.blank? == obj.present?
在某些表情中,可以在眼睛上方便/容易
一个区别是.nil?
和.empty?
是由Ruby编程语言提供的方法,而.blank?
是由Web开发框架Rails 添加的东西。
只是关于any?
一个小loggingany?
推荐:他是对的,它通常相当于!empty?
。 但是, any?
将返回true
的string只是空白(ala " "
)。
当然,也可以看到上面的1.9条评论。
不要忘记any?
这通常是!empty?
。 在Rails中,我通常会在语句结尾处检查是否存在某些if something
或者unless something
使用blank?
因为它似乎在任何地方都可以工作。
一个特殊情况是当试图评估一个布尔值是否为零时:
false.present? == false false.blank? == true false.nil? == false
在这种情况下,build议是使用.nil?
nil?
是一个标准的Ruby方法,可以在所有对象上调用,如果对象nil
,则返回true
:
b = nil b.nil? # => true
empty?
是一个标准的Ruby方法,可以在某些对象上调用,比如Strings,Arrays和Hashes,如果这些对象不包含任何元素,则返回true
:
a = [] a.empty? # => true b = ["2","4"] b.empty? # => false
empty?
不能在nil
对象上调用。
blank?
是一个Rails方法,可以在nil
对象和空对象上调用。
exists?
方法可以用来检查数据库中是否存在数据。 它返回true
或false
布尔值。
Rails 4
替代@ corban-brook的“Array gotcha :空白?” 检查一个数组是否只包含空值,可以被视为空白? 真正:
[ nil, '' ].all? &:blank? == true
人们也可以这样做:
[nil, '', "", " ",' '].reject(&:blank?).blank? == true
nil?
可以用在任何物体上。 它确定对象是否有任何值,包括“空白”值。
例如:
example = nil example.nil? # true "".nil? # false
基本上是nil?
只有当对象实际上等于'零'时才会返回真。
empty?
仅在被视为集合的对象上调用。 这包括诸如string(字符集合),散列(键/值对的集合)和数组(任意对象的集合)之类的东西。 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对象不是集合,会引发exception。
另请注意,即使集合中的项目是空白的,也并不意味着集合是空的。
blank?
基本上是nil?
的组合nil?
和empty?
检查你认为是集合的对象是有用的,但也可以是零。
其他人都解释了什么是不同的。
我想在Ruby On Rails中添加,最好使用obj.blank?
或obj.present?
而不是obj.nil?
或obj.empty?
。
obj.blank?
处理所有typesnil
, ''
, []
, {}
,如果值不可用,则返回false
如果值在任何types的对象上都可用,则返回false
。