1103 votes

Une explication concise de néant v. vider c. essai à blanc en Ruby on Rails

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? des objets sont des faux, vide ou un espace corde. Par exemple, "", " ", nil, [], et {} sont vides.

  • nil? objets sont des instances de NilClass.

  • empty? des objets sont spécifiques à la classe, et la définition varie d'une classe à l'autre. Une chaîne est vide, s'il n'a pas de caractères, et un tableau est vide si elle ne contient pas les éléments.

Est-il quelque chose qui manque, ou un resserrement de la comparaison qui peut être faite?

1410voto

Corban Brook Points 8836

.nil? peut être utilisé sur n'importe quel objet et la valeur true si l'objet est nulle.

.empty? peut être utilisé sur des chaînes de caractères, les tableaux et les tables de hachage et renvoie true si:

  • Longueur de chaîne == 0
  • Array length == 0
  • Hachage length == 0

L'exécution .empty? sur quelque chose qui est nul, va jeter un NoMethodError.

C'est là que .blank? . Il est mis en œuvre par les Rails et fonctionnera sur n'importe quel objet ainsi que des travaux comme .empty? sur des chaînes de caractères, les tableaux et les tables de hachage.

nil.blank? == true
false.blank? == true
[].blank? == true
{}.blank? == true
"".blank? == true
5.blank? == false

.blank? évalue également vrai sur les chaînes qui sont non-vide, mais contient seulement un espace:

"  ".blank? == true
"  ".empty? == false

Rails fournit également .present?, qui renvoie la négation de l' .blank?.

Tableau gotcha: blank? sera de retour false , même si tous les éléments d'un tableau sont vides. Pour déterminer un vide dans ce cas, utilisez all? avec blank?, par exemple:

[ nil, '' ].blank? == false
[ nil, '' ].all? &:blank? == true 

664voto

ju. Points 3497
<p>Ici, j’ai fait ce tableau utile dans tout les cas</p> <p><img src="http://i.stack.imgur.com/oXuhJ.png" alt="enter image description here"></p>

62voto

Alexander Malfait Points 1920
<p>Petit Conseil :<code></code><p>Peut être utile/plus facile sur les yeux à certaines expressions</p></p>

50voto

Andrew Grimm Points 22996
<p>Une différence est que <code></code> et <code></code> sont des méthodes qui sont fournies par le langage de programmation Ruby, tandis que <code></code> est quelque chose <a href="http://www.ruby-forum.com/topic/160638#706469">ajoutée</a> par le développement web framework Rails.</p>

13voto

orangechicken Points 1049
<p>Juste une petite note sur la <code></code> recommandation : il est vrai que c’est <em>généralement</em> équivalent à <code></code> . Cependant, <code></code> retournera <code></code> en une chaîne d’espaces juste (ala <code></code> ).<p>Et bien sûr, voir le commentaire de 1,9 ci-dessus, trop.</p></p>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X