可能重复:
A concise explanation of nil v. empty v. blank in Ruby on Rails
有谁能告诉我.nil?,。blank?,。empty之间的区别?在红宝石?
任何答案都将受到高度赞赏。
答案 0 :(得分:60)
在Ruby中,nil
在一个对象(类NilClass
的单个实例)中,因此可以在其上调用方法。 nil?
是Ruby中的标准方法,可以在所有对象上调用,并为true
对象返回nil
,为其他任何对象返回false
。
empty?
是某些对象(如数组,哈希和字符串)上的标准Ruby方法。它的确切行为取决于特定对象,但如果对象不包含任何元素,通常会返回true
。
blank?
不是标准的Ruby方法,而是由Rails添加到所有对象,并为true
,nil
返回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。