Je me retrouve à plusieurs reprises à la recherche d'une définition claire des différences de nil?
, blank?
et empty?
en Ruby on Rails. Voici le plus proche que je suis venu:
blank?
les objets sont faux, vides ou une chaîne d'espaces. Par exemple,""
," "
,nil
,[]
et{}
sont vides.nil?
les objets sont des instances de NilClass.empty?
les objets sont spécifiques à la classe et la définition varie d'une classe à l'autre. Une chaîne est vide si elle n'a pas de caractères et un tableau est vide s'il ne contient aucun élément.
Y a-t-il quelque chose qui manque ou une comparaison plus étroite qui peut être faite?
:nil?
est défini sur ::Kernel
et réécrite sur ::NilClass
, tout :empty?
est mis en œuvre séparément sur de nombreuses classes ( en mode natif sur ::String
, ::Array
, ::Hash
et non en mode natif sur d' autres classes comme ::Set
de stdlib et ::ActiveRecord::Relation
de rails). Donc, :nil?
est disponible dans toutes les sous-classes de ::Object
et aussi dans chaque classe qui comprend ::Kernel
par elle-même, où :empty?
doit être implémentée ou incluse spécifiquement dans vos classes.
nil
concept, commencez ici .
[1] pry(main)> [].blank? => true
present?
. En effet,blank?
renvoie true pour un tableau vide.