Объект Rails#пустой? против строки#пустой? путаница

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? и получить false, как моя предыдущая прямая командная строка. Но, я печатаю "".пустой? и я становлюсь правдивой, как обещает Rails.

чего мне не хватает в понимании того, как Rails'blank? метод работает с empty? способ?

1 ответов


Rails довольно сложно в том, как он документирует его blank? метод. Хотя Object#blank? утверждает, что также обнаруживает строки пробелов, он реализован с помощью String#blank? для обработки случая пробелов и Object#blank?, чтобы поймать общий случай. (blank? определяется на нескольких других классах, чтобы сэкономить время.)

activesupport/lib/active_support/core_ext/объект/пробел.линия РБ 66:

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