Arr*_*rel 1098 ruby ruby-on-rails
我发现自己反复寻找的差异明确的定义nil?
,blank?
以及empty?
在Ruby on Rails的.这是我最接近的:
blank?
对象是false,空或空白字符串.例如""
," "
,nil
,[]
,和{}
都是空白.
nil?
对象是NilClass的实例.
empty?
对象是特定于类的,并且定义因类而异.如果字符串没有字符,则该字符串为空;如果字符串不包含任何项目,则该字符串为空.
有什么遗漏,或者可以做出更严格的比较吗?
Cor*_*ook 1406
.nil?
可以在任何对象上使用,如果对象为零,则为true.
.empty?
可用于字符串,数组和散列,并在以下情况下返回true:
.empty?
在nil上运行会抛出一个NoMethodError
.
这就是它的.blank?
用武之地.它由Rails实现,可以在任何对象上运行,也可以像.empty?
字符串,数组和哈希一样工作.
nil.blank? == true
false.blank? == true
[].blank? == true
{}.blank? == true
"".blank? == true
5.blank? == false
0.blank? == false
Run Code Online (Sandbox Code Playgroud)
.blank?
还对非空的字符串求值为true,但只包含空格:
" ".blank? == true
" ".empty? == false
Run Code Online (Sandbox Code Playgroud)
Rails也提供 .present?
,返回否定.blank?
.
数组陷阱:即使数组的所有元素都为空,blank?
也会返回.为了确定在这种情况下空白,使用与,例如:false
all?
blank?
[ nil, '' ].blank? == false
[ nil, '' ].all? &:blank? == true
Run Code Online (Sandbox Code Playgroud)
Jul*_*pov 660
我用所有案例制作了这个有用的表格:
blank?
,present?
由Rails提供.
Sib*_*ang 211
只需扩展朱利安的表格:
Ale*_*ait 62
小建议: !obj.blank? == obj.present?
在某些表达方式中,可以方便/更容易在眼睛上使用
ste*_*eve 37
nil?
都是blank?
empty?
都是blank?
empty?
是nil?
nil?
是empty?
tl; dr - 仅使用blank?
&present?
除非你想区分""
和" "
Ala*_*n H 15
一个特例是在尝试评估布尔值是否为零时:
false.present? == false
false.blank? == true
false.nil? == false
Run Code Online (Sandbox Code Playgroud)
在这种情况下,建议是使用 .nil?
dav*_*ron 13
关于这个any?
建议的一点注意事项:他是对的,它通常相当于!empty?
.但是,any?
将返回true
一个只有空格(ala " "
)的字符串.
当然,请参阅上面的1.9评论.
小智 12
不要忘记any?
一般情况!empty?
.在Rails我通常检查的东西存在于一个语句的结束if something
或unless something
再使用blank?
在需要的地方,因为它似乎无处不工作.
小智 11
nil?
是一个标准的Ruby方法,可以在所有对象上调用,true
如果对象是nil
:
b = nil
b.nil? # => true
Run Code Online (Sandbox Code Playgroud)
empty?
是一个标准的Ruby方法,可以在一些对象(如字符串,数组和哈希)上调用,true
如果这些对象不包含任何元素,则返回:
a = []
a.empty? # => true
b = ["2","4"]
b.empty? # => false
Run Code Online (Sandbox Code Playgroud)
empty?
不能在nil
对象上调用.
blank?
是一个Rails方法,可以在nil
对象和空对象上调用.
虽然这个问题有很多答案,但我喜欢这里解释它的方式,所以又发布了一个答案:-)
查看下面的数据指标- 它不言自明,其中包含可用方法中使用的各种数据类型。
#零? | #空的? | #空白的? | #展示? | |
---|---|---|---|---|
5 | 错误的 | 无方法错误 | 错误的 | 真的 |
”” | 错误的 | 真的 | 真的 | 错误的 |
” “ | 错误的 | 错误的 | 真的 | 错误的 |
“\t\n” | 错误的 | 错误的 | 真的 | 错误的 |
[] | 错误的 | 真的 | 真的 | 错误的 |
[“A”] | 错误的 | 错误的 | 错误的 | 真的 |
{} | 错误的 | 真的 | 真的 | 错误的 |
{a:“b”} | 错误的 | 错误的 | 错误的 | 真的 |
设置新的 | 错误的 | 真的 | 真的 | 错误的 |
零 | 真的 | 无方法错误 | 真的 | 错误的 |
真的 | 错误的 | 无方法错误 | 错误的 | 真的 |
错误的 | 错误的 | 无方法错误 | 真的 | 错误的 |
参考: https: //blog.appsignal.com/2018/09/11/differences- Between-nil-empty-blank-and-present.html
其他人都很好地解释了区别。
我想添加Ruby On Rails,最好使用obj.blank?
或obj.present?
代替obj.nil?
or obj.empty?
。
obj.blank?
处理所有类型的nil
,''
,[]
,{}
,并返回true
如果值不可用,并返回false
,如果值可用在任何类型的对象。
导轨 4
@corban-brook 'Array gotcha : blank?'的替代方案 用于检查数组是否仅包含空值并且可以视为空白?真的:
[ nil, '' ].all? &:blank? == true
Run Code Online (Sandbox Code Playgroud)
还可以这样做:
[nil, '', "", " ",' '].reject(&:blank?).blank? == true
Run Code Online (Sandbox Code Playgroud)
nil?
可以用在任何物体上。它确定对象是否具有任何值,包括“空白”值。
例如:
example = nil
example.nil? # true
"".nil? # false
Run Code Online (Sandbox Code Playgroud)
基本上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
Run Code Online (Sandbox Code Playgroud)
请注意,empty?
不能在 nil 对象上调用,因为 nil 对象不是集合,它将引发异常。
另请注意,即使集合中的项目为空,也不意味着集合为空。
blank?
nil?
基本上是和的组合,empty?
它对于检查您假设是集合的对象很有用,但也可能为零。
归档时间: |
|
查看次数: |
300056 次 |
最近记录: |