Вопрос по ruby-on-rails-3, object, ruby – Разница между .nil ?, .blank? и .mpty? [Дубликат]

31

Possible Duplicate:
A concise explanation of nil v. empty v. blank in Ruby on Rails

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

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

Ваш Ответ

3   ответа
25

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
11

поэтому ее можно унифицировать / удалить (установить в ноль).nil? метод возвращает true, если он не инициализирован

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

Массивы, строки, потоки в ruby могут не содержать данных, поэтому они могут быть пустыми.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, если объект нулевой или пустой.

@ fl00r да, ты прав. я отредактирую ответ
blank? если метод ActiveSupport
59

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

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

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

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

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

Похожие вопросы