Encontro-me várias vezes à procura de uma definição clara das diferenças nil?, blank?e, empty?em Ruby on Rails. Aqui está o mais perto que eu cheguei:
blank?objetos são falsos, vazios ou uma sequência de espaços em branco. Por exemplo,""," ",nil,[], e{}estão em branco.nil?objetos são instâncias do NilClass.empty?os objetos são específicos da classe e a definição varia de classe para classe. Uma cadeia está vazia se não tiver caracteres e uma matriz está vazia se não contiver itens.
Falta alguma coisa ou pode ser feita uma comparação mais rigorosa?
:nil?é definido em ::Kernele substituído em ::NilClass, enquanto :empty?é implementado separadamente em muitas classes (nativamente em ::String, ::Array, ::Hash, e não de forma nativa em outras classes como ::Setde stdlib e ::ActiveRecord::Relationde trilhos). Portanto, :nil?está disponível em todas as subclasses ::Objecte também em todas as classes que incluem ::Kernelpor si só, onde :empty?devem ser implementadas ou incluídas especificamente em suas classes.
nilconceito, comece aqui .
[1] pry(main)> [].blank? => true



present?. Isso ocorre porqueblank?retorna verdadeiro para uma matriz vazia.