.nil?, .blank之间的区别?和 .空



可能的重复项:
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添加到所有对象中,并返回nilfalse、空或空格字符串的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。

最新更新