Я считаю себя постоянно ищу четкое определение различий 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 для пустого массива.