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

Som*_*ory 36 ruby object ruby-on-rails-3

可能重复:Ruby on Rails中nil v.vull v.blank
的简明解释

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

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

mik*_*kej 65

在Ruby中,nil在一个对象(类的单个实例NilClass)中,可以在其上调用方法.nil?在Ruby的标准方法,可以在调用的所有对象,并返回truenil对象,并false为别的.

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

blank?是不是一个标准的Ruby方法,但是被添加到所有由Rails的对象,并返回truenil,false空或空格的字符串.

因为empty?没有为所有对象定义,所以NoMethodError如果你打电话empty?,你会得到一个nil,以避免必须写像if x.nil? || x.empty?Rails添加blank?方法的东西.


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


fl0*_*00r 26

感觉它;)

零?

nil.nil?
#=> true
[].nil?
#=> false
"".nil?
#=> false
" ".nil?
#=> false
Run Code Online (Sandbox Code Playgroud)

空的?

[].empty?
#=> true
nil.empty?
#=> undefined method
"".empty?
#=> true
" ".empty?
#=> false
Run Code Online (Sandbox Code Playgroud)

空白?

[].blank?
#=> true
nil.blank?
#=> true
"".blank?
#=> true
" ".blank?
#=> true
Run Code Online (Sandbox Code Playgroud)


Rib*_*oks 11

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

b = nil
b.nil? # true
b = 'string value'
b.nil? # false
Run Code Online (Sandbox Code Playgroud)

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

array = []
array.empty? # true
array << 5 << 4 # [5, 4]
array.empty? # false

string = "" # empty line
string.empty? # true
Run Code Online (Sandbox Code Playgroud)

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

  • `blank?`如果是ActiveSupport方法 (2认同)