Me encuentro en repetidas ocasiones en busca de una definición clara de las diferencias de nil?
, blank?
y empty?
en Ruby on Rails. Aquí está lo más cerca que he estado:
blank?
los objetos son falsos, vacíos o una cadena de espacio en blanco. Por ejemplo,""
," "
,nil
,[]
, y{}
están en blanco.nil?
Los objetos son instancias de NilClass.empty?
los objetos son específicos de la clase, y la definición varía de una clase a otra. Una cadena está vacía si no tiene caracteres, y una matriz está vacía si no contiene elementos.
¿Falta algo o se puede hacer una comparación más estricta?
:nil?
se define en ::Kernel
y cambiados en ::NilClass
, mientras :empty?
se implementa por separado en muchas clases (de forma nativa en ::String
, ::Array
, ::Hash
, y no de forma nativa en otras clases como ::Set
de stdlib y ::ActiveRecord::Relation
de rieles). Por :nil?
lo tanto, está disponible en todas las subclases ::Object
y también en cada clase que incluye ::Kernel
por sí misma, donde :empty?
debe implementarse o incluirse específicamente en sus clases.
nil
concepto, comience aquí .
[1] pry(main)> [].blank? => true
present?
. Lo cual se debe a queblank?
devuelve verdadero para una matriz vacía.