可能的重复项:
Ruby on Rails 中 nil v. empty v. blank 的简明解释
谁能告诉我 Ruby 中 nil?
、blank?
和 empty?
之间的区别?
在 Ruby 中,nil
在对象中(类的单个实例NilClass
)。这意味着可以对其调用方法。 nil?
是 Ruby 中的标准方法,可以在所有对象上调用,并为nil
对象返回 true
,为其他任何对象返回false
。
empty?
是某些对象(如数组、哈希和字符串)上的标准 Ruby 方法。它的确切行为将取决于特定的对象,但通常如果对象不包含任何元素,它会返回true
。
blank?
不是标准的Ruby方法,但由Rails添加到所有对象中,并返回nil
、false
、空或空格字符串的true
。
因为empty?
不是为所有对象定义的,所以如果你在nil
上调用empty?
,你会得到一个NoMethodError
,所以为了避免编写像if x.nil? || x.empty?
Rails这样的东西,添加了blank?
方法。
回答后,我发现了一个较早的问题,"如何在 Rails(和 Ruby)中理解 nil vs. 空与空白",所以你也应该检查一下答案。
感受一下;)
零?
nil.nil?
#=> true
[].nil?
#=> false
"".nil?
#=> false
" ".nil?
#=> false
空?
[].empty?
#=> true
nil.empty?
#=> undefined method
"".empty?
#=> true
" ".empty?
#=> false
空白?
[].blank?
#=> true
nil.blank?
#=> true
"".blank?
#=> true
" ".blank?
#=> true
任何 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?
是Active Support特定的方法(在任何对象中可用),并且在Ruby On Rails中可用,具有Active Support。如果对象为 nil 或为空,则返回 true。