Я вважаю себе постійно шукаю чітке визначення відмінностей nil?
, blank?
і empty?
в Ruby On Rails. Ось найближчий я прийшов:
blank?
об'єкти - помилкові, порожні або рядок пробілів. Наприклад,""
," "
,nil
,[]
, і{}
є порожніми.nil?
об'єкти - це екземпляри NilClass.empty?
об'єкти є специфічними для класу, і визначення змінюється від класу до класу. Рядок порожній, якщо в ньому немає символів, а масив порожній, якщо він не містить елементів.
Чи щось не вистачає, чи точнішого порівняння, яке можна зробити?
:nil?
визначається на ::Kernel
і перевизначена ::NilClass
, в той час як :empty?
здійснюється окремо від багатьох класів (спочатку на ::String
, ::Array
, ::Hash
, і не рідний на інших класах , як ::Set
від STDLIB і ::ActiveRecord::Relation
від рейок). Таким чином, :nil?
він доступний у всіх підкласах, ::Object
а також у кожному класі, що включає ::Kernel
сам, де він :empty?
повинен бути впроваджений або включений конкретно у ваші класи.
nil
концепцію, починайте тут .
[1] pry(main)> [].blank? => true
present?
. Це тому, щоblank?
повертає true для порожнього масиву.