Je viens de passer à travers un bogue troublant dans la demande de mes rails et j'ai découvert que le problème était que! 0 était faux. Je suppose que cela devrait être vrai.
J'étais sous l'impression que! L'opérateur renverrait les morceaux dans un entier de qualité pour 0 deviendrait tous les 1 et ce serait vrai. P>
Ce n'est pas le cas, pourquoi? p>
NOTE DE LA CONSOLE DE RAILS: P>
1.9.3p286 :002 > !0 => false 1.9.3p286 :003 > 0 => 0 1.9.3p286 :004 > !1 => false 1.9.3p286 :005 > !!0 => true 1.9.3p286 :006 > !0 => false 1.9.3p286 :007 > !23 => false
3 Réponses :
parce que donné que 0 code> n'est pas équivalent à false code>. 0 code> est une valeur entière et la valeur booléenne de tous les entiers est true code>. Les seules choses qui évaluent à false code> sont nil code> et, explicitement, false code>. P>
0 code> est true code>, ! 0 code> est, intuitivement, false code>. p>.
! code> n'est pas un opérateur bit-sage, il s'agit d'un non code>. Peut-être que vous vouliez dire ~ 0 code>? P>
Merci ANT P. Je ne savais pas que la valeur booléenne de 0 est vraie dans Ruby. Je suppose que la valeur booléenne de 0 est fausse.
Cette réponse est fortement trompeuse. Que ce soit ou non 0 code> équivaut à false code> n'est pas pertinent. nil code> n'est pas équivalent à false code>, mais est falués. Il n'y a pas non plus de "valeur booléenne de (tous) entiers", et est également trompeur pour écrire comme si 0 code> est vrai code>; Ce n'est pas vrai code>, mais est de la vérité. Et nil code> n'évalue pas à false code>; c'est faltes. Dans l'ensemble, votre réponse est très imprécise et trompeuse.
J'ai utilisé les termes "Truthy" et "FALSY" comme sténographique pour "satisfaire une condition" et "ne pas satisfaire une condition". Je ne pense pas que ce n'est pas clair, pas plus que cela ne sera déroutant avec aucun objet rubis. Ce qui est problématique avec votre réponse, c'est que vous avez référé à Ruby Objects true code> et false code> (avec BackQuotes) et écrit comme si des choses autres que cela leur équivalent. C'est clairement faux. 0 == true code> est false code>, pas vrai code>. Vous avez écrit comme s'il est.
Dans Ruby, il n'y a que deux valeurs qui évaluent à FALSE dans les expressions logiques: FALSE et NIL. Depuis 0 n'est ni d'entre eux, il est évalué à vrai et donc! Vrai équivaut à faux. P>
de Ce blog p>
La plupart des objets de Ruby auront une valeur booléenne de vrai. Seulement deux les objets ont une valeur booléenne de faux, ce sont le faux objet lui-même et l'objet NIL. P> blockQuote>
de sorte que tout entier (même 0) a une valeur booléenne
true code>. Et ainsi! 0 code> évalue versfalse code> p>
De wikipedia ( fr.wikipedia.org/wiki/ruby_%28Programming_language%29 ): "L'évaluation booléenne de données non booléennes est stricte: 0," "et [] sont tous évalués à vrai."
Du Documents officiels: Ruby-Doc.org/docs/programmingRuby /html/tut_expressions.html# uf
Le fonctionnement du bit n'est pas pertinent.
Dupliqué possible de Pourquoi traiter 0 comme vrai dans Ruby?