Je me retrouve sans cesse à la recherche d'une définition claire des différences entre nil?
, blank?
et empty?
en Ruby on Rails. Voici ce que j'ai trouvé de plus proche :
-
blank?
sont faux, vides, ou une chaîne d'espacement. Par exemple,""
," "
,nil
,[]
et{}
sont vides. -
nil?
sont des instances de NilClass. -
empty?
sont spécifiques à une classe, et leur définition varie d'une classe à l'autre. Une chaîne de caractères est vide si elle ne contient aucun caractère, et un tableau est vide s'il ne contient aucun élément.
Y a-t-il quelque chose qui manque, ou une comparaison plus serrée qui peut être faite ?
30 votes
Un problème est qu'un tableau vide renvoie false pour
present?
. C'est parce queblank?
retourne vrai pour un tableau vide.4 votes
Une bonne chose est de voir que
:nil?
est défini sur::Kernel
et remplacée par::NilClass
alors que:empty?
est implémenté séparément sur de nombreuses classes (nativement sur::String
,::Array
,::Hash
et de manière non négative sur d'autres classes telles que::Set
de stdlib et::ActiveRecord::Relation
des rails). Donc:nil?
est disponible dans toutes les sous-classes de::Object
et aussi dans chaque classe qui comprend::Kernel
par lui-même, où:empty?
doivent être implémentées ou incluses spécifiquement dans vos classes.0 votes
Si vous essayez de comprendre l'ensemble
nil
concept commencer ici .0 votes
[1] pry(main)> [].blank? => true