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 ::Kernely 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 ::Setde stdlib y ::ActiveRecord::Relationde rieles). Por :nil?lo tanto, está disponible en todas las subclases ::Objecty también en cada clase que incluye ::Kernelpor sí misma, donde :empty?debe implementarse o incluirse específicamente en sus clases.
nilconcepto, comience aquí .
[1] pry(main)> [].blank? => true



present?. Lo cual se debe a queblank?devuelve verdadero para una matriz vacía.