Rails Object # пусто?Строка № пустая?путаница - PullRequest
7 голосов
/ 27 января 2011

Rails docs имеют эту информацию для Object#blank?

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

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

1 Ответ

10 голосов
/ 27 января 2011

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...