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

jxp*_*777 7 ruby string ruby-on-rails

Rails文档有这些信息Object#blank?

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

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

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

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

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

Mat*_*chu 10

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

activesupport/lib/active_support/core_ext/object/blank.rb,第66行:

class String
  def blank?
    self !~ /\S/
  end
end
Run Code Online (Sandbox Code Playgroud)