我发现自己一再寻找nil?
差异的明确定义nil?
, blank?
, empty?
在Ruby on Rails中。 这是我最接近的:
blank?
对象是false,空或空白字符串。 例如,""
," "
,nil
,[]
和{}
为空。nil?
对象是NilClass的实例。empty?
对象是特定于类的,并且定义因类而异。 如果字符串没有字符,则该字符串为空;如果字符串不包含任何项目,则该字符串为空。
有什么遗漏,或者可以做出更严格的比较吗?
#1楼
关于any?
一点只是一点点注意事项any?
建议:他是对的,它通常相当于!empty?
。 但是, any?
将返回true
到只是空格的字符串(ala " "
)。
当然,请参阅上面的1.9评论。
#2楼
一个特例是在尝试评估布尔值是否为零时:
false.present? == false
false.blank? == true
false.nil? == false
在这种情况下,建议是使用.nil?
#3楼
我用所有案例制作了这个有用的表格:
blank?
, present?
由Rails提供。
#4楼
只需扩展朱利安的表格:
参考: 空?空白?无?傻傻分不清楚
#5楼
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
对象和空对象上调用。
#6楼
其他人都很好地解释了有什么区别。
我想在Ruby On Rails中添加,最好使用obj.blank?
还是obj.present?
而不是obj.nil?
还是obj.empty?
。
obj.blank?
处理所有类型的nil
, ''
, []
{}
并返回true
,如果值不可用,并返回false
如果值可用在任何类型的对象。
#7楼
Rails 4
替换@ corban-brook的'Array gotcha :blank?' 用于检查数组是否仅包含空值并且可以视为空白? 真正:
[ nil, '' ].all? &:blank? == true
一个人也可以这样做:
[nil, '', "", " ",' '].reject(&:blank?).blank? == true
#8楼
快速提示: !obj.blank? == obj.present?
!obj.blank? == obj.present?
在一些表达中,可以方便/更容易在眼睛上
#9楼
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。
#10楼
exists?
方法可用于检查数据库中是否存在数据。 它返回布尔值true
或false
。
#11楼
- 一切都是
nil?
是blank?
- 一切都是
empty?
是blank?
- 没有什么是
empty?
nil?
- 没有什么是
nil?
是empty?
tl; dr - 只用blank?
和present?
除非你想区分""
和" "
#12楼
一个区别是.nil?
和.empty?
是编程语言Ruby提供的方法,而.blank?
是Web开发框架Rails 添加的东西。
#13楼
不要忘记any?
这通常是!empty?
。 在Rails我通常在一个声明中与最终检查的东西存在if something
或unless something
再使用blank?
在需要的地方,因为它似乎无处不在。
#14楼
.nil?
可以在任何对象上使用,如果对象为零,则为true。
.empty?
可用于字符串,数组和散列,并在以下情况下返回true:
- 字符串长度== 0
- 数组长度== 0
- 哈希长度== 0
跑.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