在Ruby on Rails中对nil v。空v。空白的简要解释

我发现自己一再寻找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? 方法可用于检查数据库中是否存在数据。 它返回布尔值truefalse


#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 somethingunless 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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值