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 ::Kernel
e 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 ::Set
de stdlib e ::ActiveRecord::Relation
de trilhos). Portanto, :nil?
está disponível em todas as subclasses ::Object
e também em todas as classes que incluem ::Kernel
por si só, onde :empty?
devem ser implementadas ou incluídas especificamente em suas classes.
nil
conceito, comece aqui .
[1] pry(main)> [].blank? => true
present?
. Isso ocorre porqueblank?
retorna verdadeiro para uma matriz vazia.