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

Rails文档有Object#blank?这些信息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?时我缺少什么blank? 方法适用于empty? String的方法?

Rails如何记录它的blank?有点棘手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