Подтвердить что ты не робот

Разница между .nil?,.blank? и пустые?

Возможный дубликат:
Краткое описание пустого v пустого v. в Ruby on Rails

Может ли кто-нибудь сказать мне разницу между .nil?,.blank?, пустым? в рубине?

Любой ответ будет высоко оценен.

4b9b3361

Ответ 1

В Ruby nil в объекте (один экземпляр класса NilClass), поэтому на него могут быть вызваны методы. nil? - стандартный метод в Ruby, который можно вызвать для всех объектов и возвращает true для объекта nil и false для чего-либо еще.

empty? - стандартный метод Ruby для некоторых объектов, таких как массивы, хэши и строки. Его точное поведение будет зависеть от конкретного объекта, но обычно оно возвращает true, если объект не содержит элементов.

blank? не является стандартным методом Ruby, но добавляется ко всем объектам Rails и возвращает true для nil, false, пустой или строки пробелов.

Поскольку empty? не определен для всех объектов, вы получите NoMethodError, если вы вызвали empty? на nil, чтобы избежать необходимости писать такие вещи, как if x.nil? || x.empty? Rails добавляет метод blank?.


После ответа я обнаружил, что этот вопрос задан до, поэтому вы также должны проверить ответы на этот вопрос.

Ответ 2

Почувствуйте это;)

NIL?

nil.nil?
#=> true
[].nil?
#=> false
"".nil?
#=> false
" ".nil?
#=> false

EMPTY?

[].empty?
#=> true
nil.empty?
#=> undefined method
"".empty?
#=> true
" ".empty?
#=> false

BLANK?

[].blank?
#=> true
nil.blank?
#=> true
"".blank?
#=> true
" ".blank?
#=> true

Ответ 3

Любая рубиновая переменная является объектом, поэтому она может быть унифицирована/отменена (установлена ​​на ноль). nil? возвращает true, если он не инициализирован

b = nil
b.nil? # true
b = 'string value'
b.nil? # false

Массивы, строки, потоки в рубине не могут содержать никаких данных, поэтому они могут быть пустыми. Метод empty? возвращает true, если так

array = []
array.empty? # true
array << 5 << 4 # [5, 4]
array.empty? # false

string = "" # empty line
string.empty? # true

blank? - это специальный метод ActiveSupport (доступен для любого объекта) и доступен в RubyOnRails с ActiveSupport. Он возвращает true, если объект равен нулю или пустой.