关于ruby:Rails Object#blank? vs. String#empty? 混乱

Rails Object#blank? vs. String#empty? confusion

Rails文档具有Object#blank?的此信息

An object is blank if it’s false, empty, or a whitespace string. For example,"","", nil, [], and {} are blank.

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

1
2
3
4
# 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?方法时我缺少什么?


Rails在如何记录其blank?方法时有点棘手。 尽管Object#blank?声称也检测到空白字符串,但它是用String#blank?来实现来处理空格情况而使用Object#blank?来实现它来捕获一般情况。 (blank?也定义在其他几个类上,以节省时间。)

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

1
2
3
4
5
class String
  def blank?
    self !~ /\S/
  end
end