.nil?,。blannk之间的区别?和.empty?

时间:2012-06-14 08:22:29

标签: ruby ruby-on-rails-3 object

  

可能重复:
  A concise explanation of nil v. empty v. blank in Ruby on Rails

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

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

3 个答案:

答案 0 :(得分:60)

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

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

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

由于empty?没有为所有对象定义,如果您在NoMethodError上调用empty?,则会获得nil,以避免编写if x.nil? || x.empty?之类的内容Rails添加了blank?方法。


在回答之后,我发现this question has been asked before所以你应该检查这个问题的答案。

答案 1 :(得分:25)

感觉到;)

NIL?

nil.nil?
#=> true
[].nil?
#=> false
"".nil?
#=> false
" ".nil?
#=> false

EMPTY?

[].empty?
#=> true
nil.empty?
#=> undefined method
"".empty?
#=> true
" ".empty?
#=> false

BLANK?

[].blank?
#=> true
nil.blank?
#=> true
"".blank?
#=> true
" ".blank?
#=> true

答案 2 :(得分:11)

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

b = nil
b.nil? # true
b = 'string value'
b.nil? # false

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

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。