关于ruby:.nil?,。blank之间的区别? 和.empty?

Difference between .nil?, .blank? and .empty?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
A concise explanation of nil v. empty v. blank in Ruby on Rails

谁能告诉我.nil?,。blank?,。empty之间的区别? 在红宝石?

任何答案都将受到高度赞赏。


在Ruby中,对象中的nil(类NilClass的单个实例),因此可以在其上调用方法。 nil?是Ruby中的标准方法,可以在所有对象上调用,并为nil对象返回true,为其他任何对象返回false

empty?是一些标准的Ruby方法,用于某些对象,如数组,哈希和字符串。它的确切行为取决于特定对象,但如果对象不包含任何元素,通常会返回true

blank?不是标准的Ruby方法,而是由Rails添加到所有对象,并为nilfalse,空或空白字符串返回true

因为没有为所有对象定义empty?,所以如果在nil上调用empty?,则会得到NoMethodError,以避免必须编写像if x.nil? || x.empty?这样的东西.Rails会添加blank?方法。

在回答之后,我发现之前已经问过这个问题,所以你也应该检查这个问题的答案。


感觉它;)

零?

1
2
3
4
5
6
7
8
nil.nil?
#=> true
[].nil?
#=> false
"".nil?
#=> false
"".nil?
#=> false

空的?

1
2
3
4
5
6
7
8
[].empty?
#=> true
nil.empty?
#=> undefined method
"".empty?
#=> true
"".empty?
#=> false

空白?

1
2
3
4
5
6
7
8
[].blank?
#=> true
nil.blank?
#=> true
"".blank?
#=> true
"".blank?
#=> true


任何ruby变量都是一个对象,因此它可以被单元化/取消设置(设置为nil)。如果未初始化,nil?方法返回true

1
2
3
4
b = nil
b.nil? # true
b = 'string value'
b.nil? # false

ruby中的数组,字符串和流可以不包含任何数据,因此它们可以为空。如果是这样,empty?方法返回true

1
2
3
4
5
6
7
array = []
array.empty? # true
array << 5 << 4 # [5, 4]
array.empty? # false

string ="" # empty line
string.empty? # true

blank?是ActiveSupport特定方法(在任何对象中都可用),并且在带有ActiveSupport的RubyOnRails中可用。如果object为nil或为空,则返回true。