Объект 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