Rails Object#blank? vs. String#empty?混乱

时间:2011-01-27 17:47:40

标签: ruby-on-rails ruby string

Rails docs拥有Object#blank?

的此信息
  

如果对象为false,空或空白字符串,则该对象为空。例如,“”,“”,nil,[]和{}为空白。

但该方法的来源是这样的:

# File activesupport/lib/active_support/core_ext/object/blank.rb, line 12
def blank?
    respond_to?(:empty?) ? empty? : !self
end

现在,当我打开我方便的小命令行并输入ruby -e 'p " ".empty?'时,它返回false。这意味着Rails应该说这是一个空白值,当它显然不是。但!我打开rails console并输入" ".empty?并像我之前的直线命令行一样得到假。但是,我键入“”.blank?而且我会像Rails承诺的那样得到真实。

在理解Rails的blank?方法如何使用String的empty?方法时,我缺少什么?

1 个答案:

答案 0 :(得分:10)

Rails在如何记录其blank?方法方面有点棘手。即使Object#blank?声称还检测到空白字符串,它仍然使用String#blank?来处理空格情况,并使用Object#blank?来捕获通用情况。 (blank?也定义在其他几个类上,以节省时间。)

activesupport/lib/active_support/core_ext/object/blank.rb, line 66

class String
  def blank?
    self !~ /\S/
  end
end